如果用户输入了一个字符而不是一个数字,我想给他另一个选项再试一次,但是下面的代码打印出来"无效。请输入一个数字。"永远如果用户输入一个字符而不是一个数字。为什么它不等待用户再次进入? (scanf部分是我假设的)
#include <stdio.h>
long get_long(void);
int main(void) {
long start;
printf("Enter a number: ");
start = get_long();
return 0;
}
long get_long(void)
{
long num = 0;
while (scanf("%ld", &num) != 1)
{
printf("Invalid. Pls enter a number.");
}
return num;
}
答案 0 :(得分:0)
这是scanf
的常见问题。 (这个问题已被多次询问;可能有重复的答案。)问题是当你键入不是有效数字的simething时,scanf
失败(并返回0),但是它在输入流上留下不匹配的输入。
你必须以某种方式刷新未读输入。一种方式是这样的。写下函数
void flush_one_line()
{
int c;
while((c = getchar()) != EOF && c != '\n')
{ /* ignore */ }
}
此函数读取并丢弃一行输入,直到换行。 (也就是说,它抛弃了之前scanf
调用没有读过的任何内容和所有内容。)
然后像这样修改原始程序:
while (scanf("%ld", &num) != 1)
{
printf("Invalid. Please enter a number.");
flush_one_line();
}
答案 1 :(得分:-1)
int i=1;
while (i!= 2)
{ scanf("%ld", &num) ;
if(num==1)
break;
printf("Invalid. Pls enter a number.");
i++;
}
答案 2 :(得分:-1)
你的代码背后的逻辑是有缺陷的。你基本上对你的代码做了什么,只要没有正确的输入,就要求while循环工作。
while(incorrect input is made) {
print
}
正确的解决方案将是
while(number of tries > 0) {
do operations
check for right input, if it is correct break the loop, else keep on going
decrement number of tries by one
}