我的C代码中的逻辑错误

时间:2012-11-01 21:51:52

标签: c

我是初学者,只是学习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;
 }

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

5 个答案:

答案 0 :(得分:15)

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

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

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

总是假的。

我怀疑你的意思

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

答案 1 :(得分:4)

你总是有一个真实的条件:

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

例如:

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

您应将其更改为:

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

这应该可以解决你的无限循环。

答案 2 :(得分:2)

||替换为&&

答案 3 :(得分:2)

character!= SPACE)|| (字符!= NEWLINE总是如此。将其更改为字符!= SPACE)&& (性格!= NEWLINE。

答案 4 :(得分:1)

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