为什么这里scanf输入0而while不停呢

输入的值是0但是while循环没有停止
只有输入一个不是数字的值才听

img

scanf()的返回值是代表正确读入的数据项数,而输入0,scanf()是可以正常读取到的,其返回值是1,所以while循环不会停止,而输入的不是数字,scanf()不能正确读取到一个整数,它的返回值会是0,所以此时while循环才会退出;

如果要输入0退出,可以在while循环里加个条件x!=0即可。

测试代码如下:

参考链接:


#include <stdio.h>

int main(void){
    
    int x,i,j,k,a=0,sum=0;
    
    // https://blog.csdn.net/HNAKXR/article/details/81046708
    // 当输入的数不是0,则循环计算,否则退出计算 
    while((scanf("%d",&x))!=0&&x!=0){
        for(i=(x/5);i>=0;i--){
            for(j=(x-i*5)/2;j>=0;j--){
                sum++;
                k=x-5*i-2*j;
            }
        }
        a++;
    }
    
    printf("a=%d,sum=%d\n",a,sum);
    
    return 0;
    
} 

img

【以下回答由 GPT 生成】

问题的原因是scanf函数在读取失败时会返回EOF,而不是0。所以,while循环的条件应该改为while((scanf("%d", &x)) != EOF)

以下是修改后的代码:

#include <stdio.h>

int main() {
    int x, i, j, k, a = 0, sum = 0;

    while ((scanf("%d", &x)) != EOF) {
        for (i = (x / 5); i >= 0; i--) {
            for (j = (x - i * 5) / 2; j >= 0; j--) {
                sum++;
                k = x - 5 * i - 2 * j;
            }
        }
    }

    // 执行其他操作...

    return 0;
}

这样修改后,当输入为0时,循环会停止。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

把o改成EOF