C 为什么代码不打印任何东西作为输出?

C 为什么代码不打印任何东西作为输出?,c,eof,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

按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;
}

您应该查看文档以了解scanf的返回值。。。它返回扫描的项目数,0、1、2等。。。非EOF

您应该检查文档中的scanf返回值。。。它返回扫描的项目数,0、1、2等。。。非EOF

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


如果要在非数字输入时停止,请将循环更改为whilescanf%d,&a>0

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


如果要在非数字输入时停止,请将循环更改为whilescanf%d,&a>0

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


请注意,如果您不在空行上,可能需要使用Ctrl+Z两次一次刷新当前输入行,一次生成EOF。

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


请注意,如果您不在空行上,您可能需要使用Ctrl+Z两次一次刷新当前输入行,一次生成EOF。

我讨厌那个家伙,但对我有用。在ctrl d之前输入的确切顺序是什么?编译代码时使用的是什么?使用的是什么操作系统?什么终端?如果这在您的机器上不起作用,我建议您在www.nitrous.io上试用此类示例,我方不支持。它在linux下对我来说很好用。发布你正在键入的内容。Ctrl-D之前的按键顺序很重要。我讨厌那个家伙,但对我来说很有用。在ctrl d之前输入的确切顺序是什么?编译代码时使用的是什么?使用的是什么操作系统?什么终端?如果这在您的机器上不起作用,我建议您在www.nitrous.io上试用此类示例,我方不支持。它在linux下对我来说很好用。发布你正在键入的内容。紧靠Ctrl-D之前的按键顺序很重要。实际上。如果发生读取错误,例如实际处于EOF并且仍在尝试读取数据,则返回EOF。实际上。如果发生读取错误,例如实际处于EOF并且仍在尝试读取数据,则返回EOF。