我无法在此 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。
您需要在一行的开头键入此内容。