怎么看待这段代码?

a564034199 2010-07-05 11:17:46
#include <stdio.h>

#define OUT 0
#define IN 1

int main (void)
{
int c, why;
int word = 0;

while ((c = getchar()) != EOF) // getchar()函数按下回车键以后,字符和回车键都被送入内存缓冲区。
{
if (c == ' ' || c == '\n' || c == '\t') // 我输入个空格按下回车
{
why = OUT;
}
else if (why == OUT) // 那这条语句是不是该执行2次?空格一次,回车一次
{
why = IN;
++word;
}
}
printf ("输入的单词个数有%d\n", word); // 那word是否应该等于2呢?
return 0;
}


能不能详细的说明一下呢?谢谢前辈们了!!
...全文
148 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
a564034199 2010-07-05
  • 打赏
  • 举报
回复
#include <stdio.h>

#define OUT 0
#define IN 1

int main (void)
{
int c, why;
int word = 0;

while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\n' || c == '\t') // 当C是空格或是'\n'和连续的8个空格时,why = OUT,
{ // 只要C符合其中的任何一个条件就一直执行if语句,直到C是其他字符时才执行else if语句。
why = OUT;
}
else if (why == OUT)
{
why = IN;
++word;
}
}
printf ("输入的单词个数有%d\n", word);
return 0;
}


下面是与它等价的代码
#include <stdio.h>

#define OUT 0
#define IN 1

int main (void)
{
int c, why;
int word = 0;

while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\n' || c == '\t') // 当C是空格或是'\n'和连续的8个空格时,why = OUT,
{ // 只要C符合其中的任何一个条件就一直执行if语句,直到C是其他字符时才执行else if语句。
why = OUT;
}
else // else if语句等价于这条语句
{
if (why == OUT)
{
why = IN;
++word;
}
}
}
printf ("输入的单词个数有%d\n", word);
return 0;
}


然后是关于判断语句的一点小小的理解,不对的话请拍砖。

if (...)
{

}
else
{
}
// 这两个语句只能执行其中一个大家肯定都知道的.
// else if 从字面理解就是
else
if (...)
// 这就说明了
if (...)

else if

else

// 三条判断语句,只要执行了其中一个,别的就不能再执行了。不管条件是否符合下面的判断都不再执行了。

K&R书中的代码我能百分百理解的非常的少,而且他的书非常的简略,不过得到的东西绝对比C Primer Plus要多得多。他这段代码的意思前面说的很清楚了,谢谢5楼的提示了。
ylu029 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 a564034199 的回复:]
运行的结果和我想的不一样啊。照我想的话我输入两个空格,输出结果应该是2,可是是0。
[/Quote]
if (c == ' ' || c == '\n' || c == '\t') // 我输入个空格按下回车
{
why = OUT;
明白为什么了吧?
yzx714 2010-07-05
  • 打赏
  • 举报
回复
回楼主:这是一段正常的代码,出自K&R
angel6709 2010-07-05
  • 打赏
  • 举报
回复

#include <stdio.h>

#define OUT 0
#define IN 1

int main (void)
{
int c, why;
int word = 0;

while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\n' || c == '\t')
{
why = OUT; //这里,why和OUT已经相等了,下面的else if肯定会成立
}
else if (why == OUT)
{
why = IN;
++word;
}
}
printf ("输入的单词个数有%d\n", word);
return 0;
}


-----》这是你想要的??



#include <stdio.h>

#define OUT 0
#define IN 1

int main (void)
{
int c, why;
int word = 0;

while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\n' || c == '\t')
{
why = OUT; //这里,why和OUT已经相等了,下面的else if肯定会成立
}
if (why == OUT)
{
why = IN;
++word;
}
}
printf ("输入的单词个数有%d\n", word);
return 0;
}


adamwyb 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 a564034199 的回复:]
运行的结果和我想的不一样啊。照我想的话我输入两个空格,输出结果应该是2,可是是0。
[/Quote]
0是没错啊,这个代码是统计非空格和换行回车的字符个数。

if (c == ' ' || c == '\n' || c == '\t')
magic7004 2010-07-05
  • 打赏
  • 举报
回复
顺便告诉楼主,word应该=0

if (c == ' ' || c == '\n' || c == '\t')
{
why = OUT; //这里,why和OUT已经相等了,下面的else if肯定会成立
}
else if (why == OUT)
{
why = IN;
++word;
}
红色的错了,else if 不会被执行的。
楼主要想执行else if的那坨代码,需要把else if改成if
a564034199 2010-07-05
  • 打赏
  • 举报
回复
运行的结果和我想的不一样啊。照我想的话我输入两个空格,输出结果应该是2,可是是0。
magic7004 2010-07-05
  • 打赏
  • 举报
回复
晕,楼主自己运行下,不就知道了。
jbz001 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 a564034199 的回复:]
C/C++ code
#include <stdio.h>

#define OUT 0
#define IN 1

int main (void)
{
int c, why;
int word = 0;

while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\n' || c == '\t')
{
why = OUT; //这里,why和OUT已经相等了,下面的else if肯定会成立
}
else if (why == OUT)
{
why = IN;
++word;
}
}
printf ("输入的单词个数有%d\n", word);
return 0;
}

[/Quote]

why = OUT; //这里,why和OUT已经相等了,下面的else if肯定会成立
偶是江湖中人 2010-07-05
  • 打赏
  • 举报
回复
统计单词的个数
Qyee 2010-07-05
  • 打赏
  • 举报
回复
一次也没执行,word=0;
Qyee 2010-07-05
  • 打赏
  • 举报
回复
最重要的是知道怎么调试,,,vc6.0
F9设断点,F10单步调试
forster 2010-07-05
  • 打赏
  • 举报
回复
英语 单词个数
liuchai910 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 a564034199 的回复:]
运行的结果和我想的不一样啊。照我想的话我输入两个空格,输出结果应该是2,可是是0。
[/Quote]
本来就是0,你这段代码的意思是要统计单词的个数,但是你只输入了空格并没有输入单词,所以只能是0了,这段代码没有任何错误,是正确的。只是楼主你把本段代码的意思理解错了,是统计单词,而不是字符的个数。
jinlin0220 2010-07-05
  • 打赏
  • 举报
回复

if (...)
{

}
else
{
}
// 这两个语句只能执行其中一个大家肯定都知道的.
// else if 从字面理解就是
else
if (...)
// 这就说明了
if (...)

else if

else

// 三条判断语句,只要执行了其中一个,别的就不能再执行了。不管条件是否符合下面的判断都不再执行了。


受益

70,023

社区成员

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

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