#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;
}