2

我是初学者,刚学C;所以,请耐心等待我。

我正在尝试编写一个非常简单的程序,它遍历一个字符串,计算每个单词中的字符,然后用它们的字符数替换这些单词。我的问题是我陷入了无限循环,无法弄清楚原因!这是代码:

#define NEWLINE '\n'
#define SPACE ' '

int main(int argc, char *argv[]) {
  int character;
  int count = 0;

  printf("\nType in a sentence of any lenght, then hit ENTER!\n");
  character = getchar();

  while (character != NEWLINE) {

     while ((character != SPACE)  || (character != NEWLINE)) {
        count++;
        character = getchar();
     }

  printf("%d ", count); 
  count = 0;

  if (character != NEWLINE) {
     character = getchar();
     }
  }  

 printf("\n");
 system("PAUSE"); 
 return 0;
 }

感谢所有帮助过我的人!我想我回去再研究一下逻辑运算符。

4

4 回答 4

15
while ((character != SPACE)  || (character != NEWLINE)) {
    count++;
    character = getchar();
}

这将无限循环,因为相反:

(character == SPACE)  && (character == NEWLINE)

永远是假的。

我怀疑你的意思是

while ((character != SPACE)  && (character != NEWLINE)) {
    count++;
    character = getchar();
}
于 2012-11-01T21:54:28.577 回答
4

你有一个永远真实的条件:

(character != SPACE)  || (character != NEWLINE)

例如:

character = ' ':  false or true => true
character = '\n': true or false => true

您应该将其更改为:

(character != SPACE) && (character != NEWLINE)

那应该可以解决您的无限循环。

于 2012-11-01T21:57:06.423 回答
2

替换||&&

于 2012-11-01T21:54:18.390 回答
1

替换 || (OR) 与 && (AND) 因为 while 循环将始终为真,因此它永远不会跳出循环。如果你更换它应该可以工作。

于 2012-11-01T21:58:07.700 回答