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

标签 c kernighan-and-ritchie

当我准确输入时,K&R 中的某些示例在 Code:Blocks 中不起作用。 例如这个程序:

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

当我输入这段代码并运行它时,当我按下 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;
}

我是不是漏掉了什么?自 K&R 第 2 版以来,C 是否发生了变化,还是我做错了什么?

最佳答案

当您按下回车键时,您将 \n 发送到标准输入流(并将其他数据刷新到 stdin,如果有的话)。此字符 (\n) EOF 相同。要发送 EOF,请按以下组合键:

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

关于c - 为什么来自 K&R 的某些代码在代码 :Blocks? 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29746522/

相关文章:

C 结构初始化完成 "recursively"

使用 FFI 和 C 函数在 ruby​​ 中创建动态数组类

c++ - 我需要一个树转储选项,它在当前的 gcc 版本中不再存在

c - C 中的 Putchar 和 Getchar

声明数组的说明

c - 从 C 中的 Lua 函数返回 'nil' 与返回 0 值

c - 在 TCP 服务器套接字上用 C 接收数据

c - 类型转换 : signed int to unsigned long in C

c - 数据类型在计算机中究竟是如何表示的?

c - getchar() 并调节循环以中断特定字符