EOF在C语言中的应用

EOF在C语言中的应用,c,C,代码: #包括 main() { INTC; printf(“输入任何字符!”:”; 而((c=getchar())!=EOF){ 普查尔(c); printf(“%d\n”,(c=getchar())!=EOF); } } 我试着用C测试EOF,但我现在很难用它。我想得到EOF的值,发现它是-1 我使用getchar()和putchar()编写了一个简单的程序。 我已经添加了程序和输出的屏幕截图。输出对我来说毫无意义 如您所见,我正在尝试获取一个字符,并使用getchar()和putchar

代码:

#包括
main()
{
INTC;
printf(“输入任何字符!”:”;
而((c=getchar())!=EOF){
普查尔(c);
printf(“%d\n”,(c=getchar())!=EOF);
}
}
我试着用C测试EOF,但我现在很难用它。我想得到EOF的值,发现它是
-1

我使用
getchar()
putchar()编写了一个简单的程序。

我已经添加了程序和输出的屏幕截图。输出对我来说毫无意义

如您所见,我正在尝试获取一个字符,并使用
getchar()
putchar()
显示它。我试图打印while循环中使用的条件值。为了检查EOF,我故意输入
-1
putchar()
打印出
-1
,然后最后的printf语句让我感到困惑。我为
getchar()
输入
-1
,但
1
显示的意思是c不等于EOF。但我认为
-1
是EOF。
我不明白为什么还会显示
11
。我正在使用
codeblocks
IDE。

请帮帮我。提前感谢。

getchar一次输入一个字符(字节)。因此,当您输入“-1”时,它被视为字符数组输入,第一个getchar只接受输入“-”,第二个getchar接受输入“1”。因此,您无法获得所需的输出。此外,putchar设计为一次打印一个字符。所以它可能也不能正常工作。您可以按照以下方式更改代码以使其正常工作

int c;

while(scanf("%d", &c)!=EOF) { //to ensure there is some input value as scanf will return EOF when input stream finishes.

    printf("%d\n", c);
    if(c == EOF) {
        printf("c is equal to EOF\n");
        break;
    }
}

EOF
不是字符,也不是从流中读取的。它只是一个返回值,指示该流上没有更多的输入。您可以通过在Windows上键入CtrlD on*nix或CtrlZ来发出
EOF的信号。

1)请以文本形式发布代码,而不是屏幕截图。2) 在同一个循环中调用“getchar()”两次。可能不是你想要的;)输入
-1
将导致
getchar
返回
-
的ASCII码,然后返回
1
的ASCII码,这是字符和整数的混合
EOF
可以通过按Ctrl+D(Linux)或Ctrl+Z(Windows)生成。这是非常糟糕的,
scanf()
可以返回EOF,但不能为其设置目标变量,这只是虚构的,您无法测试此代码。谢谢。修正了jensIt的错误,需要注意的是control-D只会在一行的开头或按下两次时导致EOF。它实际上不会生成EOF。相反,它将键盘输入缓冲区的内容发送到程序。输入处理软件将接收零字符的读取请求解释为EOF。因此,当没有字符挂起时,control-D会导致EOF行为。当字符处于挂起状态时,Control-D会立即发送它们,而不是在按下enter键时发送,而不会导致EOF行为。这正是我要搜索的。
int c;

while(scanf("%d", &c)!=EOF) { //to ensure there is some input value as scanf will return EOF when input stream finishes.

    printf("%d\n", c);
    if(c == EOF) {
        printf("c is equal to EOF\n");
        break;
    }
}