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