Scanf считывает enter, как символ конца строки. Как исправить? - C (СИ)

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

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

Добрый день. Пишу меню для программы в Visual Studio 2015, возникает проблема: scanf запоминает enter, как символ конца строки, и на следующей итерации цикла считывает из потока '\n'.

Пожалуйста, помогите избавиться от этого '\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); 
//Срабатывает, но на повторной итерации не требует ввода,
//затем всегда записывает в переменную пустое значение и зацикливает программу
...
}
Как правильно воспользоваться волшебной строчкой "%[^\n]%*c", которую везде рекомендуют, я не могу понять, из-за неё программа завершается с критической ошибкой.

Решение задачи: «Scanf считывает enter, как символ конца строки. Как исправить?»

textual
Листинг программы
ch = getch();

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


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

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

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