为什么代码不打印任何输出?

时间:2014-03-28 15:14:57

标签: c eof

按下Ctrl + D后,我希望这段代码可以打印数组,但它什么都不做。

#include<stdio.h>

int main(){
    int k,i=0,a;
    int b[10];
    while(scanf("%d",&a)!=EOF){
        if(a>(a/4+a/3+a/2))
        b[i]=a;
        else
        b[i]=(a/4+a/3+a/2);
        i++;
    }
    for(k=0;k<=i;k++){
        printf("%d\n",b[k]);
    }
    return 0;
}

3 个答案:

答案 0 :(得分:4)

您使用错误的组合键在操作系统上生成EOF(Windows 8)。 Ctrl + D 在类似unix的系统上很常见,但Windows系统通常使用 Ctrl + Z

请注意,如果您没有空行,则可能必须使用 Ctrl + Z 两次(一次刷新当前输入行,并且一次生成EOF)。

答案 1 :(得分:1)

最佳猜测 - 您输入的内容不是数字,因此scanf返回0并且您的程序进入无限循环。由于您没有显示您的输入,因此无法分辨。

如果您希望它停止在非数字输入上,请将循环更改为while(scanf("%d",&a) > 0)

答案 2 :(得分:0)

你应该查看scanf的返回值的文档...它返回扫描的项目数,0,1,2等...不是EOF