C 期望程序打印EOF的值

C 期望程序打印EOF的值,c,for-loop,scanf,eof,C,For Loop,Scanf,Eof,在守则中: #include<stdio.h> int main() { int t; for(;scanf("%d",&t);printf("%d",t)); } #包括 int main() { int t; 对于(;scanf(“%d”和&t);printf(“%d”,t)); } 当我输入一般整数时,程序按预期运行。我在Windows上工作,所以当我将Cntrl+Z扫描到参数t中时,我不会在标准输出上获得EOF I.e-1的值,而是在其中存储的

在守则中:

#include<stdio.h>

int main()
{
    int t;
    for(;scanf("%d",&t);printf("%d",t));

}
#包括
int main()
{
int t;
对于(;scanf(“%d”和&t);printf(“%d”,t));
}
当我输入一般整数时,程序按预期运行。我在Windows上工作,所以当我将Cntrl+Z扫描到参数t中时,我不会在标准输出上获得EOF I.e-1的值,而是在其中存储的前一个参数。 另外,当我按下Cntrl+D时,程序终止,为什么Cntrl+D会导致scanf返回0

为什么我的编译器在scanf-Cntrl+C上说:“进程以-107状态终止……”
我不明白为什么会这样?请提供帮助。

scanf
返回成功匹配的格式说明符的数目,或者如果在匹配(或未能匹配)第一个说明符之前到达输入结尾,则返回
EOF

按Ctrl+Z时,
scanf
到达输入端并返回EOF(因为Ctrl+Z在Windows上终止输入)。这不会终止
for
循环,因为
EOF
非零,因此会打印
t
的上一个值(因为调用未更改
t
)。请注意,
t
不会像您预期的那样在输入结束时接收值
EOF
scanf
返回
EOF
作为返回值,它不会将其写入您传递给它的指针中


按Ctrl+D时,它将被视为任何其他字符。由于它是非数字的,因此它会导致
%d
说明符的匹配失败,并且
scanf
返回0,从而终止循环。

尝试此代码,如果按CTL+Z(linux上的CTL+d),则会返回0。否则打印1

#include <stdio.h>
main()
{
        int c;

        while(c=getchar()!=EOF) //here get the character and then compares with the EOF if Not equal 1 will assign to c , if equal 0 will assign to c.
                printf("%d",c);
                printf("%d",c);//when ever we press ctl+Z(ctl+d on linux) then it will print zero remaing all cases this statement wont execute
getchar();
}
#包括
main()
{
INTC;
while(c=getchar()!=EOF)//此处获取字符,然后与EOF进行比较如果不相等,1将分配给c,如果相等,0将分配给c。
printf(“%d”,c);
printf(“%d”,c);//当我们按下ctl+Z(linux上的ctl+d)时,它将打印零,并保留此语句不会执行的所有情况
getchar();
}

当我扫描cntrl+C时,我的编译器会说“进程终止,状态为-107……”。这是为什么?@amiageek按Ctrl+C或Ctrl+Break会导致程序终止。Ctrl+D不会导致Windows上的EOF。