0

プログラム内にwhileループを作って、プログラムがwhileループにたどり着くのですが、実行されません。コードを長い間見てきたので、見落としている非常に小さなエラーがあるように感じます。

  int strbuf = 100;
  char string[strbuf];
  char *exit = "exit";
  while(!strcmp(string, exit)){
      printf("Enter a word to search. Enter exit to quit");
      scanf("%s", string);
      state = present(fIndex, string);
      if(state){
        printf("The word %s was found on line %d", string, state);
    }
}

編集: 入力はキーボードからです。編集編集:新しいコード(同じ問題)

int strbuf = 100;
char string[strbuf];
char *exit = "exit";

printf("Enter a word to search. Enter exit to quit\n");
scanf("%s", string);
    while(!strcmp(string, exit)){
    state = present(fIndex, string);
    if(state){
        printf("The word %s was found on line %d", string, state);
    }
    else printf("The word %s was not found", string);
}
4

5 に答える 5

3

のmanページを読んでくださいstrcmp

strcmp()関数は、2つの文字列s1とs2を比較します。s1がs2より小さい、一致する、または大きいことがそれぞれ検出された場合は、ゼロより小さい、等しい、または大きい整数を返します。

一致する場合strcmpは0を返し、2つの文字列が一致しない場合は、ゼロ以外の値を返します。

したがって、文字列が一致している間、while(!strcmp(string, exit))ループを続けます。

stringまた、初期化されておらず、ジャンクが含まれているため、未定義の動作が発生します。最初に初期化するかdo..while、ループを少なくとも1回実行する必要がある場合はループを使用します。

于 2012-04-10T03:24:19.040 に答える
1

はい、実行中ですループの本体while実行されていない可能性がありますが、これは、実行しているのが未定義stringの動作であり、有用なものに初期化される前に使用しているためです。

簡単な修正は変更することです:

char string[strbuf];

の中へ:

char string[strbuf] = {'\0'};

And, for the sake of readability, you should expand your comparisons unless they truly are boolean values,(and, since you're hard-coding "exit" in a few places, I'm not sure why you'd have it as a variable):

while (strcmp (string, "exit") != 0) {
于 2012-04-10T03:25:02.453 に答える
0

stringと比較する前に入力を取得していませんexit。置く:

printf("Enter a word to search. Enter exit to quit");
scanf("%s", string);

whileループの前。

于 2012-04-10T03:21:26.003 に答える
0

whileループが実行されていない場合は、!strcmp(string, exit)falseを意味します

つまりstrcmp(string, exit)、tru(0以外)でなければなりません

strcmpは一致すると0を返すためstring、と同じではありませんexit

この理由は?文字列に値を入れることはありません。「dowhile」ループに変更することをお勧めします。

于 2012-04-10T03:24:47.460 に答える
0

さらに、exit()は標準の C 関数です (stdlib.h を参照)。strExitのようなものがあなたの目的により適しているかもしれません。

于 2012-04-10T03:29:58.970 に答える