看看你的C入门了没!

simble2010 2010-08-02 09:33:47
练习1-8 编写一个用于统计空格、制表符与换行符个数的程序。 (这是这个题的答案,没有错误但是为什么运行时不能统计啊?)
#include <stdio.h>

int main(void)
{
int blanks, tabs, newlines;
int c;
int done = 0;
int lastchar = 0;

blanks = 0;
tabs = 0;
newlines = 0;

while(done == 0)
{
c = getchar();

if(c == ' ')
++blanks;

if(c == '\t')
++tabs;

if(c == '\n')
++newlines;

if(c == EOF)
{
if(lastchar != '\n')
{
++newlines;
}
done = 1;
}
lastchar = c;
}

printf("Blanks: %d\nTabs: %d\nLines: %d\n", blanks, tabs, newlines);
return 0;
}
...全文
393 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
jx8904020853 2010-08-03
  • 打赏
  • 举报
回复


#include <stdio.h>

int main(void)
{
int blanks, tabs, newlines;
int c;
int lastchar = 0;

blanks = 0;
tabs = 0;
newlines = 0;
freopen("in.txt","r",stdin);
while(scanf("%c",&c) != EOF)
{
switch (c)
{
case ' ':
++blanks;
break;
case '\t':
++tabs;
break;
case '\n':
++newlines;
break;
default:
break;
}
lastchar = c;
}
if(lastchar != '\n')
{
++newlines;
}
printf("Blanks: %d\nTabs: %d\nLines: %d\n", blanks, tabs, newlines);
return 0;
}
yuliang3311 2010-08-02
  • 打赏
  • 举报
回复
标题太大了……

hebuttm 2010-08-02
  • 打赏
  • 举报
回复
标题太大了……
Csuxiaowu 2010-08-02
  • 打赏
  • 举报
回复
还有就是字符数组 你能得到\0,需要它的存储单位都长,比如char str[5]="12345";这样就不好,他无法放'\0';需要改成char str[6]="12345";你的c定义的只是一个字符而已;
Csuxiaowu 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 simble2010 的回复:]
引用 5 楼 csuxiaowu 的回复:
不要一个一个输入嘛 这样你判断c==EOF出不来
您能不能细说一下。。。我还是不懂
[/Quote]
你一个一个的得到输入 c不会得到EOF也就是\0这个字符
你用的是getchar(),这个表示输入字符,它所能得到的是你实实在在输入的字符,而不是你按下的Enter键
用gets(),则表示接受输入的字符串,当你按下Enter键的时候,它的结尾能得到\0,\0是字符串结尾的标志,字符没有;
你程序的意思就是输入的等于EOF才会跳出循环
17楼的朋友表示输入#则结束这是可以的
qazwhl845174869 2010-08-02
  • 打赏
  • 举报
回复
此程序很垃圾!错误太多!没法改了。还是换一种吧!要慢慢学啊,还早呢!
xuxu273 2010-08-02
  • 打赏
  • 举报
回复
我承认是被标题骗进来了
simble2010 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 mymtom 的回复:]
引用 11 楼 yiruirui0507 的回复:

晕死,代码没问题,编译成功,结果正确,楼主?

标题党!

EOF:
在WINDOWS下用 CTLR+Z然后回车


[/Quote] ^_^ 哥哥 为什么我的机子上 不出结果啊。。。。
simble2010 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 lijie466522097 的回复:]

#include <stdio.h>

int main(void)
{
int blanks, tabs, newlines;
int c;
int done = 0;
int lastchar = 0;

blanks = 0;
tabs = 0;
newlines = 0;

while(done……
[/Quote]主要是不出结果啊。。。入了门的 说说原因啊。。。这是the c programming language 后面的习题,我发现好多都是这个问题。
lijie466522097 2010-08-02
  • 打赏
  • 举报
回复

#include <stdio.h>

int main(void)
{
int blanks, tabs, newlines;
int c;
int done = 0;
int lastchar = 0;

blanks = 0;
tabs = 0;
newlines = 0;

while(done == 0)
{
c = getchar();

if(c == ' ')
++blanks;

if(c == '\t')
++tabs;

if(c == '\n')
++newlines;

if(c == '#') /*换成#后可以统计的*/
{
if(lastchar != '\n')
{
++newlines;
}
done = 1;
}
lastchar = c;
}

printf("Blanks: %d\nTabs: %d\nLines: %d\n", blanks, tabs, newlines);
return 0;
}
simble2010 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pang123hui 的回复:]
完全能显示啊,既然你用EOF结束,你先随便输入一些字符,然后ctrl+c,你看显示了吗
[/Quote] 兄弟这个真不能啊 输入字符 他不出结果!
mymtom 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yiruirui0507 的回复:]

晕死,代码没问题,编译成功,结果正确,楼主?
[/Quote]
标题党!

EOF:
在WINDOWS下用 CTLR+Z然后回车
maoxing63570 2010-08-02
  • 打赏
  • 举报
回复
建议去看下C的库函数,比如说你要统计空格的个数就可以用isspace()来统计了。
「已注销」 2010-08-02
  • 打赏
  • 举报
回复
EOF 是ctrl+d 吧, ctrl+c interupt, ctrl+z suspend
maoxing63570 2010-08-02
  • 打赏
  • 举报
回复
看错了不好意思
yiruirui0507 2010-08-02
  • 打赏
  • 举报
回复
晕死,代码没问题,编译成功,结果正确,楼主?
maoxing63570 2010-08-02
  • 打赏
  • 举报
回复
一看就知道这个老兄的问题了,分明是没有初始化,你用做计数的一定要初始化为0
pang123hui 2010-08-02
  • 打赏
  • 举报
回复
完全能显示啊,既然你用EOF结束,你先随便输入一些字符,然后ctrl+c,你看显示了吗
simble2010 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 csuxiaowu 的回复:]
不要一个一个输入嘛 这样你判断c==EOF出不来
[/Quote]您能不能细说一下。。。我还是不懂
simble2010 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 canshui 的回复:]
C/C++ code
if(c == '#')//别用EOF结尾
{
if(lastchar != '\n')
{
++newlines;
}
done = 1;
}
lastchar = c;
[/Quote]还是不行 统计不了
加载更多回复(16)

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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