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

在C中读取整数时对字符进行错误检查,c,error-checking,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

在我的编程课上,我写了一个计算除数和的程序。所以我已经到了我的最后一部分,那就是错误检查,如果我读入一个字符,我会遇到问题。我之前在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)
  {
int main(无效){
int userIN=0;
int i=0;
int next=0;
内部温度=105;
整数周期;
输入(“最多输入10个小于或等于100的整数”);
而(scanf(“%d”、&userIN)!=EOF&&(i<10))
{
如果(用户输入>100){
printf(“无效输入\n”);
出口(1);
}
否则如果(用户输入<100)
{
提前谢谢你的帮助

编辑:程序正在正确循环,我的问题是错误检查输入的字符是否与代码本身无关

scanf()
如果无法读取格式字符串指定的值,则返回除
EOF
以外的值(例如,使用
%d
,它会遇到类似
foo
)。您可以对此进行检查。需要注意的是,它不会从
stdin
读取有问题的数据,因此它仍然会影响下一次调用
scanf()
——这可能会导致无限循环(
scanf()
报告错误,调用
scanf())
同样,它遇到相同的输入,因此报告相同的错误)


您最好使用
fgets()
阅读整行输入。然后手动检查输入或使用
sscanf()
(注意名称中的附加
s
)。这种方法的优点是更容易避免意外用户输入时出现无限循环。

您可以在
i
小于10时循环。第一个if将查看scanf是否失败。如果是,输入缓冲区将被清除,while循环将再次尝试。如果捕获EOF,则退出
。如果scanf成功,则input与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");
        }
    }
}
while(i<10){
printf(“输入10个整数中的%d(小于或等于100)”,i+1;
如果(scanf(“%d”,&userIN)!=1)
{
而((ch=getchar())!='\n'&&ch!=EOF){
//清除输入缓冲区
}
如果(ch==EOF){
出口(1);
}
}
否则{
如果(用户输入>100){
printf(“无效输入\n”);
}
其他的
{
i++;//良好的输入前进到下一个输入
printf(“有效”);
}
}
}

这看起来不像你的完整代码这不是我的完整代码,这是我遇到问题的地方…当整数用户输入一个字符时读入&userIN时,我只检查大于100的整数时出错。我不想添加我的整个代码,因为这是家庭作业,不想让其他人复制它。你是否初始化了GI归零?