Си почему программа обрывается посередине и не выполняет все инструкций из main?

Логика работы: программа считывает посимвольно введенный текст, сохраняя его в динамический массив уникальных предложений.(эта часть программы работает исправно). Затем выводит подсказку и ожидает ввода одной из цифр. После же должна выводить все предложения. Почему-то моя программа пропускает инструкцию scanf, а также пропускает цикл for с печатью предложений, но при этом исправно печатает строку с их кол-вом. Почему так происходит?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wctype.h>
#include <wchar.h>
#include <locale.h>

#define MEM_STEP 5 * sizeof(wchar_t)


struct Text {
    struct Sentence **text;
    int size;
    int n;
};


struct Sentence {
    wchar_t *str;
    int size;
};


struct Sentence *read_sentence(){
    int size = MEM_STEP;
    wchar_t *buf = (wchar_t*)malloc(size * sizeof(wchar_t));
    wchar_t temp = getwchar();
    int n = 0;
    do{
        if (n >= size - 2 * sizeof(wchar_t)) {
            buf = realloc(buf, (size + MEM_STEP) * sizeof(wchar_t));
            size += MEM_STEP;
        }
        
        buf[n] = temp;
        temp = getwchar();
        n++;
    }while (temp != '.' && temp != '\n');
    
    buf[n] = temp;
    buf[n + 1] = '\0';
    if (buf[0] == '\n') {
      buf++;
    }
    struct Sentence *sentence = malloc(sizeof(struct Sentence));
    sentence->str = buf;
    sentence->size = size;
    return sentence;
}


int is_sent_unique(struct Sentence** txt, struct Sentence* sent, int n){
    for(int i = 0; i < n; i++){
        int k = 0;
        for(int j = 0; j < wcslen(sent->str); j++){
            if (towupper(txt[i]->str[j]) == towupper(sent->str[j]))
                k++;
            
        }
        if(k == wcslen(sent->str) && k == wcslen(txt[i]->str))
            return 0;
        
    }
    return 1;
}



struct Text read_text(){
    int size = MEM_STEP;
    struct Sentence **text = malloc(size * sizeof(struct Sentence*));
    struct Sentence *temp;
    int n = 0;
    int nlcount = 0;

    do{
        temp = read_sentence();
        if (n >= size - 2 * sizeof(struct String*)) {
            text = realloc(text, (size + MEM_STEP)* sizeof(struct Sentence *));
            size += MEM_STEP;
        }

        if(temp->str[0] == '\n' && temp->str[1] == '\0'){
            nlcount++;
        }else{
            while (temp->str[0] == '\t' || temp->str[0] == ' ' || temp->str[0] == '\n') {
                temp->str++;
            }
            
            if (is_sent_unique(text, temp, n)){        
                text[n] = temp;
                n++;
                
            }
            nlcount = 0;
        }    
    }while (nlcount < 2);
    
    struct Text txt;
    txt.text = text;
    txt.size = size;
    txt.n = n;
    return txt;

}



int main()
{
    
    setlocale(LC_ALL, "");
    int func_numb = 0;
    
    
    puts("Введите текст, по окончании ввода нажмите четыре раза Enter:");
    struct Text main_text = read_text();
    
    
    puts("Введите номер одного из доступных действий:\n1.Для каждого предложения вывести строку-дату вида “ДД-ММ-ГГГГ”, где день - количество слов в предложении, месяц - наибольшая длина слова в предложении, год - общее количество символов в предложении + 1900.\n2.Вывести предложения так, чтобы слова шли в обратном порядке.\n3.Отсортировать предложения по длине первого слова в предложении.\n4.Удалить все предложения у которых все слова имеют длину не больше 3 символов.");
   
    scanf("%d", &func_numb);
    
    
    switch (func_numb)
    {
    case 1:
        
        break;
    case 2:
        
        break;
    case 3:
        
        break;
    case 4:
        
        break; 
   
    default:
        printf("Данные некорректны\n");
    }
  
 
    
    for (int i = 0; i < main_text.n; i++) {
        wprintf(L"%s\n", main_text.text[i]->str);
    }
  
  
    printf("Количество предложений %d", main_text.n);
  
    for (int i = 0; i < main_text.n; i++) {
        free(main_text.text[i]);
    }
    free(main_text.text);
    return 0;
}

Ответы (0 шт):