对于我的编程课程,我编写了一个程序来计算除数之和。所以我已经完成了我的最后一部分,即错误检查,如果我读了一个字符,我就遇到了问题。我已经搜索了S.O.早些时候,以及试图解决问题,并且无法找到适用于无穷无尽的负数的解决方案,直到100。
当我点击一个字符时,它将其设置为0并且直到结束,我希望它在读取后退出
int main (void){
int userIN=0;
int i = 0;
int next = 0;
int temp= 105;
int cycle;
puts("Enter up to 10 integers less than or equal to 100");
while(scanf("%d ", &userIN) !=EOF && (i < 10))
{
if(userIN > 100){
printf("Invalid Input\n");
exit(1);
}
else if(userIN < 100)
{
感谢您的帮助
编辑:程序正在循环,我的问题是错误检查输入的字符而不是代码本身的任何内容
答案 0 :(得分:3)
scanf()
如果无法读取格式字符串指定的值,则会返回EOF
以外的值(例如,使用%d
,会遇到foo
等数据。你可以检查一下。需要注意的是,它不会从stdin
读取有问题的数据,因此它仍然会影响scanf()
的下一次调用 - 这会导致无限循环(scanf()
报告错误,再次调用scanf()
,遇到相同的输入,因此报告相同的错误。)
使用fgets()
阅读整行输入可能会更好。然后手动检查输入或使用sscanf()
(请注意名称中的其他s
)。这种方法的优点是更容易避免意外用户输入的无限循环。
答案 1 :(得分:1)
当i
小于10时,你可以循环。第一个if会看到scanf是否失败。如果是,则清除输入缓冲区并再次尝试while循环。如果捕获了EOF,则exit
。如果scanf成功,则将输入与100进行比较,如果在范围内,则while循环计数器递增
声明int ch = 0;
while ( i < 10) {
printf("Enter %d of 10 integers. (less than or equal to 100)\n", i + 1);
if(scanf(" %d", &userIN) != 1)
{
while ( ( ch = getchar()) != '\n' && ch != EOF) {
//clear input buffer
}
if ( ch == EOF) {
exit ( 1);
}
}
else {
if(userIN > 100){
printf("Invalid Input\n");
}
else
{
i++;// good input advance to the next input
printf("Valid");
}
}
}