在C中读取整数时对字符进行错误检查

时间:2015-11-07 23:00:09

标签: c error-checking

对于我的编程课程,我编写了一个程序来计算除数之和。所以我已经完成了我的最后一部分,即错误检查,如果我读了一个字符,我就遇到了问题。我已经搜索了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)
  {

感谢您的帮助

编辑:程序正在循环,我的问题是错误检查输入的字符而不是代码本身的任何内容

2 个答案:

答案 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");
        }
    }
}