使用K&R C编程语言手册开始使用C语言

Ale*_*x P 2 c

出于自我提升/拓宽视野的原因,我决定使用K&R'C编程语言书来学习C的一些基础知识.

我一直在跟随练习,使用Bloodhsed DEV C++ 4.9.9.2作为我的IDE.

我遇到了以下练习 - 计算输入中的字符:

main()
{
    double nc;
    for(nc = 0; getchar() != EOF; ++nc);
    printf("&.0f\n", nc);
}
Run Code Online (Sandbox Code Playgroud)

此代码符合并运行,没有错误.

但是,当我在控制台窗口中输入一个字符串并按下回车时,我没有得到任何输出,即显示字符串中有多少字符的数字.例如,如果我在控制台窗口中键入'test',我希望4显示为输出.

我确定问题只是我设置IDE的方式?或者我错过了一些更基本的东西?

任何帮助非常感谢.来自VB背景,我真的很兴奋学习像C这样的不同语言,并掌握指针!

编辑

这里也给出了我的问题的相关答案,非常有用: 为什么getchar()不能在控制台上识别返回EOF?

pax*_*blo 10

在标准输入流关闭之前(CTRLZ在Windows CTRLD下或在各种UNIX风格下),您将不会获得任何输出.

换行符只是另一个角色.

您可能还想获得更新的C教程书.main()不再是ISO C的强制主要原型之一,您应该使用以下方法之一:

int main(void) {}
int main(int argc, char *argv[]) {}
Run Code Online (Sandbox Code Playgroud)

最重要的是,由于您没有终止格式字符串,因此显示的代码将无法编译printf.使用:

printf("%.0f\n", nc);
Run Code Online (Sandbox Code Playgroud)

代替:

printf("&.0f\n, nc);
Run Code Online (Sandbox Code Playgroud)

为什么你使用a double也是一个谜,除非你想处理真正大的文件 - 我会使用int或者long为此.

这是我要使用的代码:

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

产生以下会话:

pax> countchars
Hello there.<ENTER>
My name is Bob.<ENTER>
<CTRL-D>
29

pax>
Run Code Online (Sandbox Code Playgroud)