为什么K&R的某些代码在Code:Blocks中不起作用?

use*_*936 2 c kernighan-and-ritchie

当我完全键入它们时,K&R中的一些示例在Code:Blocks中不起作用.例如,这个程序:

#include <stdio.h>
main()
{
    long nc;
    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)

当我输入此代码并运行它时,程序要么冻结,要么在按Enter键时不执行任何操作.

下面的程序做同样的事情(计算一个字符串中的字符),它的工作原理.

#include <stdio.h>
int main()
{
    char s[1000];
    int i;
    scanf("%s",s);
    for(i=0; s[i]!='\0'; ++i);
    printf("Length of string: %d",i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?自K&R第二版以来C是否已被更改或我做错了什么?

Spi*_*rix 6

当您按Enter键时,您将发送\n到标准输入流(并将其他数据刷新到stdin,如果有的话).这个字符(\n)一样EOF.要发送EOF,请按以下键组合:

  • CTRL Z然后Enter在Windows中.
  • CTRL D 在Unix/Linux/OSX中

  • 在Linux上,Ctrl-D仅在缓冲区已经为空时才起作用,否则它只是刷新它.因此,除非他之后没有任何字符按下输入,否则他必须按两次Ctrl-D. (2认同)