Конфликт 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]");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д