2

对于我的编程课,我编写了一个程序来计算除数之和。所以我已经到了最后一部分,即错误检查,如果我读入一个字符,我会遇到问题。我之前搜索过 SO,并试图找出一些东西,但找不到适用于直到 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)
  {

我在这里先向您的帮助表示感谢

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

4

2 回答 2

3

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

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

于 2015-11-07T23:28:08.813 回答
1

您可以循环 whilei小于 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");
        }
    }
}
于 2015-11-07T23:38:22.973 回答