我正在尝试编写一个函数,它接受并检查输入是否为1到1000之间的整数。如果不是,则调用自身。但是,如果我输入错误的输入,例如“F”,它不会停止扫描,而是变成无限循环。有什么建议吗? 它与输入缓冲区有关吗?
#include <stdio.h>
int num,input;
int take_input()
{
num = scanf("%d", &input);
if( num != 1 || input < 1 || input > 1000 )
{
printf("input must be between 1 and 1000");
take_input();
}
return 1;
}
int main()
{
take_input();
}
答案 0 :(得分:1)
首先:你不需要在第二次测试中检查是否(num!= 1)......只有在第一次测试为假时才会到达那里。
第二:您只传递一个要读取的参数:scanf将返回1或0(如果它没有正确读取)。所以会发生的情况是:如果您读取一个数字,那么 num 将具有值1,您将在第一个if之后立即退出。
要使你的递归工作,你必须:
if(num != 1 )
return 1;
if( input < 1 || num > 1000 )
{
printf("input must be between 1 and 1000");
take_input();
}
这样,当前值不在指定的时间间隔内时,它会继续询问新值。
答案 1 :(得分:0)
take_input if语句应该检查输入变量而不是num。 当您执行scanf时,您可以存储您在&amp; input中读取的内容的结果。更换 num with input。