печать «пожалуйста, введите номер» каждый раз, когда я нажимаю enter, вводя только алфавит

#c #scanf #buffer #enter

Вопрос:

Я хочу предложить пользователю «Пожалуйста, введите номер» всякий раз, когда пользователь нажимает клавишу ввода. Сначала посмотрите код:

 #include <stdio.h>
#include <stdio.h>
int main()
{
    int a;
    char b, c;
    int flag = 1;
    while (true) {
        flag = 0;

        if (scanf("%d", amp;a) == 1)
            break;
        scanf("%c", amp;b); // this is to clear the frontline characters gradually
        // such that number embedded in the input can be read
        // for e.g. aa4, abdk2jsdl etc
    }
    do {
        scanf("%c", amp;c); // this is to clear the 'n' buffer if number is the last input(4, as4,hdd7 etc)
        // and others if the input was a2ssdf

    } while (c != 10); // where the buffers will be ssdf and 'n' character

    printf("the number is:%d", a);
}
 

Я пытался создать систему ввода, используя только scanf и без использования строки. Я знаю, что использование строк сделает это проще. Система ввода такова, что, если пользователь не введет номер, он будет продолжать запрашивать и одновременно очищать все буферы без использования fflush, так как это не является стандартным.

Так что до этого момента все было хорошо. Но теперь я хочу добавить дополнительную функцию,чтобы сообщить пользователю «Пожалуйста, введите номер», если пользователь вводит что-то вроде aaaaa, dsfk только с алфавитами. итак, для ясности я приведу пример…

вход: aaa выход: пожалуйста, введите номер.

2-й вход: hz2 2-й выход: Вы ввели 2.

Но то, на что я способен прямо сейчас, так это..

Вывод вышеуказанного ввода «aaa»: пожалуйста, введите номер, пожалуйста, введите номер, введите номер

Поэтому, в принципе, я хочу распечатать его только тогда, когда пользователь нажмет клавишу ввода, и только один раз, когда у вас возникнут какие-либо идеи? Это без использования строки.

Комментарии:

1. Домашнее задание? Является ли использование scanf() обязательным требованием? Почему бы не использовать функцию, которая, например, считывает один символ getchar() ?

2. Зачем дважды включать один и тот же файл заголовка?

Ответ №1:

Попробуйте эту функцию

 int getnum() {
    int input;
    int num = 0;
    while(1) {
        if((input = getchar()) == 'n')
            printf("Please input a numbern");
        else if(input >= '0' amp;amp; input <= '9') {
            do {
                num = num * 10   input - '0';
            } while((input = getchar()) >= '0' amp;amp; input <= '9');
            break;
        }
    }
    return num;
}