出于自我提升/拓宽视野的原因,我决定使用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?
答案 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
也是一个谜,除非你想处理真正大的文件 - 我会使用int
或long
。
这是我要使用的代码:
#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;
}