出于自我提升/拓宽视野的原因,我决定使用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)
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |