请教一个简单的c语言问题

kaoxuchen 2010-02-19 09:24:49
最近在看《c语言程序设计》的电子版
这是其中的一个例子 统计换行符数目
我用dev c++编译后
不知输出的结果对不对

编译后 运行
输入字符后按Enter后就换行
没有显示数目
以下是代码部分

#include <stdio.h>
main()
{
int c,nl;
nl=0;
while((c = getchar()) != EOF)
if (c == '\n')
++nl;
printf("%d\n",nl);
}




...全文
108 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
AaronIV 2010-02-22
  • 打赏
  • 举报
回复
c最好是个字符,用int也可以,但最好不要用一个转换的ASCII码的值去赋给int,这样会曲解了c=getchar()的含义。不过我想书应该是多一个弯,让人多一个智慧吧!

然而,现在不管是用的DEV C++还是Visual C++,在打入字符串的时候,并不是打一个就读一个,那么这个时候回车不仅仅是起到一个换行的作用了,而是确认的作用,每换一次行循环读一次,但是非常可恶的是有的编译器并不会理会EOF(End Of File),如果不相信的话可以自己去调试看看。有的编译器就算是理会也对Ctrl+Z的输入方式做了一些限制。我想书中也应该是传授一种程序的思想,而并不一定在当今的程序设计软件平台上行得通。

建议多多往后面的学习,不要把精力花在EOF的纠缠上,学学后面的文件流,C++里面的IO流,还有很多的字符串函数都是可以轻轻松松解决这个问题的,像getline()函数等等!
CppHuoXiang 2010-02-20
  • 打赏
  • 举报
回复
而且这份代码调试有问题。
CppHuoXiang 2010-02-20
  • 打赏
  • 举报
回复
为什么要按ctrl+z ???
我测试了一下。。按ctrl+z +回车就可以显示行数


EOF是什么东西
kaoxuchen 2010-02-20
  • 打赏
  • 举报
回复
哦 没有看到10楼的贴 我的问题 解决了 谢谢
kaoxuchen 2010-02-20
  • 打赏
  • 举报
回复
引用 12 楼 cpphuoxiang 的回复:
为什么要按ctrl+z ???
我测试了一下。。按ctrl+z +回车就可以显示行数


EOF是什么东西
EOF是end of file
我试了ctrl+z和ctrl+d
出现^z和^d
是不是接下来要按enter才能执行?
  • 打赏
  • 举报
回复
同意stardust20的说法,不是书的问题
kingstarer 2010-02-19
  • 打赏
  • 举报
回复
打几行字后按ctrl+z 再按回车
会显示出你总共打了几行字
媒体盒子 2010-02-19
  • 打赏
  • 举报
回复
c好像不能 是字符串把
kaoxuchen 2010-02-19
  • 打赏
  • 举报
回复
哦 谢谢 我试一试
引用 7 楼 stardust20 的回复:
引用 6 楼 kaoxuchen 的回复:嘿嘿 我去翻看了一下 发现电子版的上面确实没有印看来要去下个新的引用 3 楼 yzx714 的回复:楼主看书的时候注意细节啊。忘记大括号了
也不一定是书的问题。。可能是楼主理解错了。。程序的功能可能是你输入N句话。。然后不想输入后。。你可以按 ctrl+z也可能是ctrl+d结束输入。。然后它就输出 你总共输入了几句话。。这样就不用加括号了。。但是你按换行他不会显示数目
stardust20 2010-02-19
  • 打赏
  • 举报
回复
引用 6 楼 kaoxuchen 的回复:
嘿嘿 我去翻看了一下 发现电子版的上面确实没有印
看来要去下个新的引用 3 楼 yzx714 的回复:楼主看书的时候注意细节啊。忘记大括号了

也不一定是书的问题。。可能是楼主理解错了。。程序的功能可能是你输入N句话。。然后不想输入后。。你可以按 ctrl+z也可能是ctrl+d结束输入。。然后它就输出 你总共输入了几句话。。这样就不用加括号了。。但是你按换行他不会显示数目
kaoxuchen 2010-02-19
  • 打赏
  • 举报
回复
嘿嘿 我去翻看了一下 发现电子版的上面确实没有印
看来要去下个新的
引用 3 楼 yzx714 的回复:
楼主看书的时候注意细节啊。
忘记大括号了
phpjspasp 2010-02-19
  • 打赏
  • 举报
回复
你再按ctrl+d 或 ctrl+z 试试
stardust20 2010-02-19
  • 打赏
  • 举报
回复
引用 2 楼 kaoxuchen 的回复:
不加大括号的话 是不是执行于while循环的nl的自加 而不继续向下执行?
引用 1 楼 stardust20 的回复:C/C++ codewhile((c= getchar())!= EOF) {if (c=='\n')++nl; printf("%d\n",nl); }//加个大括号。。这样while里面才能执行这两句

嗯。。while for等都是只执行它们下面的一句。。。用';'区分一句
yzx714 2010-02-19
  • 打赏
  • 举报
回复
楼主看书的时候注意细节啊。
忘记大括号了
kaoxuchen 2010-02-19
  • 打赏
  • 举报
回复
不加大括号的话 是不是执行于while循环的nl的自加 而不继续向下执行?
引用 1 楼 stardust20 的回复:
C/C++ codewhile((c= getchar())!= EOF)
{if (c=='\n')++nl;
printf("%d\n",nl);
}//加个大括号。。这样while里面才能执行这两句
stardust20 2010-02-19
  • 打赏
  • 举报
回复
 while((c = getchar()) != EOF)
{
if (c == '\n')
++nl;
printf("%d\n",nl);
}//加个大括号。。这样while里面才能执行这两句

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧