写了一段代码代码用来统计输入的行数、单词数、字符数,结果总是不对
代码如下#include <stdio.h>
#define IN 1
#define OUT 0
int main(void)
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF)
{
++nc;
if (c == '\n')
{
++nl;
}
if (c == ' ' || c == '\n' || c == '\t')
{
state = OUT;
}
else if (state = OUT)
{
state = IN;
++nw;
}
}
printf("\n%d %d %d\n", nl, nw, nc);
return 0;
}
输出结果中字符数没问题,但行数、单词数一直不对 你好!看了你的代码,问题出在单词计数的逻辑上。具体来说,在 else if (state = OUT) 这一行,你误用了赋值运算符 = 而不是比较运算符 ==。这导致 state 被错误地重新赋值,且条件始终为假,因此单词数无法正确增加。
修正方法很简单:将 else if (state = OUT) 改为 else if (state == OUT)。这样,当遇到非空白字符且当前状态为 OUT 时,才会切换到 IN 状态并增加单词数。
以下是修正后的代码:
#include <stdio.h>
#define IN 1
#define OUT 0
int main(void)
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF)
{
++nc;
if (c == '\n')
{
++nl;
}
if (c == ' ' || c == '\n' || c == '\t')
{
state = OUT;
}
else if (state == OUT)
{
state = IN;
++nw;
}
}
printf("\n%d %d %d\n", nl, nw, nc);
return 0;
}
修改后,程序应该能正确统计行数、单词数和字符数。注意,行数统计依赖于换行符的数量,如果输入的最后一行没有换行符,则行数可能少计一行,但这与常见工具(如 wc)的行为一致。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 一天发10万论坛广告群发软件--视频教程--点击播放
https://cloud.video.taobao.com/vod/kOAK4RQLF2WlUe2QNReX5hkymKnZ4pHc4cTtllOER0U.mp4
日发20万QQ邮箱--视频教程-点击播放--联系微信:rj8003002--客服QQ-2775416944--论坛群发软件
https://img.alicdn.com/imgextra/i2/1055339560/O1CN015UzyZN2KUXWQoHksa_!!1055339560.jpg
一天发10万论坛广告群发软件--视频教程--点击播放
https://cloud.video.taobao.com/vod/kOAK4RQLF2WlUe2QNReX5hkymKnZ4pHc4cTtllOER0U.mp4
日发20万QQ邮箱--视频教程-点击播放--联系微信:rj8003002--客服QQ-2775416944--论坛群发软件
https://img.alicdn.com/imgextra/i2/1055339560/O1CN015UzyZN2KUXWQoHksa_!!1055339560.jpg
页:
[1]