这段代码的输出是什么?EOF如何在终端中终止



我无法在此 c 代码中打印计数 c。

我已经在有很多行的终端中尝试过。

#include<stdio.h>
main()
{
    long c=0;
    while(getchar()!=EOF)
        ++c;
    printf("%ldn",c);
}

预期结果应该是我们提供的字符。

程序公开未定义的行为,因为c未初始化。事实上,每一个预测c结果的答案都是错误的,即使有人说"这是垃圾"。您的变量c是具有自动存储持续时间的局部变量,因此它本身不会被初始化;在表达式 ++c 中,变量是一个左值,因为它指定了一个对象。请参阅标准中关于左值和非初始化的内容(例如,请参阅此在线 C11 标准草案(:

6.3.2.1 左值、数组和函数指示符

1...

2... 如果 lvalue 指定了一个可以使用寄存器存储类声明的自动存储持续时间的对象(从不 其地址被占用(,并且该对象未初始化(未声明( 使用初始值设定项,并且之前未对其执行任何赋值 使用(,行为未定义

要在终端中发出EOF信号,请键入一个特殊键,具体取决于您使用的操作系统。例子:

  • 在视窗(cmd(上,它是CtrlZ
  • 在Linux上,它是CtrlD

您需要在一行的开头键入此内容。

最新更新