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)

常に false になります。

私はあなたが意味すると思います

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 ループが常に true であり、そのためループから抜け出すことがないためです。交換すれば動くはずです。

于 2012-11-01T21:58:07.700 に答える