读书人

C primer plus 里有一题搞不懂,该如何

发布时间: 2012-05-21 18:04:41 作者: rapoo

C primer plus 里有一题搞不懂
是c primer c里面的 ,第2个 if 和第三个 if不懂



#include <stdio.h>
#include <ctype.h>

#define STOP '|'

int main(void)
{
char c; //读入字符
char prev; //前一个读入字符
long n_chars = 0L; //字符数
int n_lines = 0; //行数
int n_words = 0; //单词数
int p_lines = 0; //不完整的行数
int inword = 0; //如果c在一个单词中,则inword等于1



printf ("Enter text to be analyzed (exit to terminate): \n");
prev = '\n';



while ( (c = getchar () ) != STOP)
{
n_chars++; //统计字符



if ( c == '\n' )
n_lines++; //统计行



if ( !isspace (c) && !inword )
{
inword = 1; //开始一个新单词
n_words++; //统计单词
}



if ( isspace (c) && inword )
inword = 0; //到达单词的尾部



prev = c; //保存字符值
}



if ( prev != '\n' )
p_lines = 1;



printf ("charcters = %ld .words = %d, lines = %d." ,n_chars ,n_words,n_lines);

printf ("partial lines = %d\n" ,p_lines);


return 0;
}


问题是

.......................................................
if ( !isspace (c) && !inword )
{
inword = 1; //开始一个新单词
n_words++; //统计单词
}


if ( isspace (c) && inword )
inword = 0; //到达单词的尾部
.......................................................


这两个if是怎么工作的 比如我输入连续输入两个 a



第一个a进入

if ( !isspace (c) && !inword )
{
inword = 1;
n_words++;
}



把inword设为 1 真



第二个a进入了



if ( !isspace (c) && !inword )
{
inword = 1;
n_words++;
}



这里 if ( !isspace (c) && !inword ) 里的!inword 刚才已经在第一个a进入后设为1了, 那么现在!inword等于假 就为假了 那这个if还怎么执行? 不是&& 必须两个都为真才执行吗?



[解决办法]
输入第二个a的时候两个if语句都不执行
遇到a后面的空格,第二个if语句才执行

读书人网 >C语言

热点推荐