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

时间:2009-12-20 10:38:42

标签: 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);
}

此代码符合并运行且没有错误。

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

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

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

修改

这里也给出了我的问题的相关答案,非常有帮助: Why doesn't getchar() recognise return as EOF on the console?

3 个答案:

答案 0 :(得分:10)

在标准输入流关闭之前,您将无法获得任何输出(在Windows下 CTRL Z CTRL D 在各种UNIX风格下。)

换行符只是另一个角色。

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

int main(void) {}
int main(int argc, char *argv[]) {}

最重要的是,由于您没有终止printf格式字符串,因此所示的代码将不会编译。使用:

printf("%.0f\n", nc);

而不是:

printf("&.0f\n, nc);

为什么你使用double也是一个谜,除非你想处理真正大的文件 - 我会使用intlong

这是我要使用的代码:

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

产生以下会话:

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

pax>

答案 1 :(得分:1)

替换:

printf("&.0f\n, nc);

printf("%.0f\n", nc);

答案 2 :(得分:0)

您提供的代码是正确的但似乎不起作用。在我的情况下,它也没有工作,所以我只用'\ n'替换了EOF,它对我有效,但只有一行,因为按下后输入它给出输出和程序结束。 请在下面找到完整的代码:

#include <stdio.h>
/* Count characters in input; version 2*/

int main(void)
{
    double nc;
    for (nc = 0; getchar() != '\n'; ++nc);
    printf("%.0f \n", nc);
    return 0;
}