Конфликт fgets/gets_s с scanf, или снова про очистку буфера - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Если функцию f1 запускать до scanf все работает корректно, если после то ввод строки не происходит. Подскажите что не так. Спасибо
int main(void) {
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    while (1) { 
        int menu = 0;
        system("cls"); 
        puts("Выберите вариант меню");
        puts("1 - Запись строки в файл");
        puts("2 - Чтение строки");
        puts("3 - Зашифровать");
        puts("4 - Расшифровать");
        puts("0 - Выйти из программы");
 
        fflush(stdin);
        printf("\nВведите пункт меню: ");

            scanf_s("%d", &menu);
 
        switch (menu) {
        case 1: f1(); printf("\n\nВ файл записана строка. Нажмите любую клавишу для возврата в меню"); _getch(); break;
        case 2: f2(); printf("\n\nФайл считан. Нажмите любую клавишу для возврата в меню"); _getch(); break;
        case 3: f2(); printf("\n\nФайл зашифрован. Нажмите любую клавишу для возврата в меню"); _getch(); break;
        case 4: f3(); printf("\n\nФайл расшифрован. Нажмите любую клавишу для возврата в меню"); _getch(); break;
        case 0: exit(0);
        default: puts("Неверный выбор, нажмите любую клавишу"); _getch();
        }
    }
}
 
void f1(void) {
    char str[80];
    int n = 0;
 
    FILE *file2 = fopen("text.txt", "w");
    if (!file2) {
        printf("Ошибка создания файла\n");
        exit(1);
    }
 
    printf("Введите строку:\n");
 
    fflush(stdin);
    gets_s(str, 80);
    //fgets(str, sizeof str, stdin);
    // Пишем символы в файл  
    while (str[n]) {
        fputc(str[n++], file2);
    }
 
    fclose(file2);
 
}
в 2010 никаких проблем нет, только в 2015 Значит в компиляторе дело?

Решение задачи: «Конфликт fgets/gets_s с scanf, или снова про очистку буфера»

textual
Листинг программы
scanf("%d[^\n]");

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5
Похожие ответы