Scanf считывает enter, как символ конца строки. Как исправить? - C (СИ)
Формулировка задачи:
Добрый день. Пишу меню для программы в Visual Studio 2015, возникает проблема: scanf запоминает enter, как символ конца строки, и на следующей итерации цикла считывает из потока '\n'.
Вот что я пробовал делать:
Как правильно воспользоваться волшебной строчкой "%[^\n]%*c", которую везде рекомендуют, я не могу понять, из-за неё программа завершается с критической ошибкой.
Пожалуйста, помогите избавиться от этого '\n'
, не используя cin/cout и другие полезные плюшки Си++. Возможно, я пишу не на тот форум, но по заданию нам надо представить, что мы пишем именно на Си, а не на Си++.#include <stdio.h>
#include <locale.h>
void main()
{
setlocale(LC_ALL, "Russian");
char ch = 0;
int num = 0;
while (ch != '0')
{
printf("Меню:\n");
printf("1. Запустить программу\n");
printf("0. Выйти из программы\n");
scanf("%c", &ch);
switch (ch)
{
case '1':
printf("Введите что-нибудь");
scanf("%d", &num);
printf("Вы ввели - %d\n", num);
break;
case '0':
break;
default:
printf("Промахнулись :)\n");
break;
}
}
}void main()
{
...
fflush(stdin); //Не работает, символ '\n' остается в потоке всё равно.
scanf("%c", &ch);
...
}void main()
{
...
scanf("%c%*с", &ch);
//Отлично работает, но только если scanf в программе всего один
...
}void main()
{
...
scanf("%[^\n]c", &ch);
//Срабатывает, но на повторной итерации не требует ввода,
//затем всегда записывает в переменную пустое значение и зацикливает программу
...
}Решение задачи: «Scanf считывает enter, как символ конца строки. Как исправить?»
textual
Листинг программы
ch = getch();