Конфликт 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]");