此代码将输出什么?EOF如何在终端终止?

时间:2019-06-11 07:50:22

标签: c

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

我在一个多行的终端中尝试过。

#include<stdio.h>
main()
{

    long c=0;
    while(getchar()!=EOF)
        ++c;
    printf("%ld\n",c);
}

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

2 个答案:

答案 0 :(得分:2)

由于c未初始化,因此您的程序暴露了未定义的行为。 实际上,每个预测c结果的答案都是错误的,即使有人说“很垃圾”。您的变量c是具有自动存储期限的局部变量,因此它本身不会被初始化;在表达式++c中,您的变量是一个左值,因为它指定了一个对象。参见标准关于左值和未初始化的说明(例如,参见this在线C11标准草案):

  

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

     

1 ...

     

2 ...如果左值指定了可以用寄存器存储类声明的自动存储持续时间的对象(从不   取得了其地址),并且该对象未初始化(未声明)   使用初始化程序,并且之前未对其进行任何分配   使用),行为未定义

答案 1 :(得分:1)

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

  • 在Windows(cmd)上是 Ctrl Z
  • 在Linux上是 Ctrl D

您需要在行首输入此内容。