首页 > 解决方案 > 在 C 中使用 scanf() 的空条目的默认值

问题描述

我正在查看来自研究站点的以下 C 代码,并想确认带有 scanf("%d", number ) 的空条目的默认值是否为-1?. 也就是说,如果“数字”是一个“空条目”,它会自动被解释为 -1 吗?

如果空条目不被理解为 -1,下面的代码如何不运行“do”部分中的第一个 if 语句(增量计数器)?

int main(void)
{
    int number;
    int max = -100000;
    int counter = 0;

    do {
        scanf("%d",&number);
        if(number != -1)
            counter++;
            if(number > max)
                max = number;
    }
    while (number != -1);
        if(counter)
          printf("The largest number is %d \n",max);
        else
            printf("Hey, you haven't entered any number!");
    return 0;
}

标签: cscanf

解决方案


没有“默认值”之类的东西scanf。如果scanf失败,则不会对指向的对象进行分配。

所以代码的想法是循环将继续,直到用户输入 a -1

该代码缺少对来自 的返回值的检查scanf,即,而不仅仅是

scanf("%d",&number);

代码应该像

if (scanf("%d",&number) != 1)
{
     // Invalid input
     // Add error handling or just exit
     exit(1);
}

推荐阅读