4

在代码中:

#include<stdio.h>

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

}

当我将一般整数作为输入时,程序按预期运行。我在 Windows 上工作,所以当我将 Cntrl+Z 扫描到参数 t 中时,我没有得到 EOF 的值,即标准输出上的 -1,而是存储在其中的前一个参数。另外,当我按 Cntrl + D 程序终止时,为什么 Cntrl+D 会导致 scanf 返回 0?

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

4

2 回答 2

6

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

当您按 Ctrl+Z 时,scanf到达输入的末尾并返回 EOF(因为 Ctrl+Z 在 Windows 上终止输入)。这不会终止你的for循环,因为它是非零的,所以打印EOF了之前的值(因为调用没有改变)。请注意,它不会像您期望的那样在输入结束时接收值:作为返回值返回,它不会将其写入您传递给它的指针中。tttEOFscanfEOF

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

于 2013-08-28T13:56:57.610 回答
0

试试这段代码,如果你按下 CTL+Z(Linux 上的 CTL+D),你就会得到零。否则打印 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();
}
于 2013-08-28T14:03:30.800 回答