-2

私は「猫の言葉|記号」をやっています(言葉はテキストファイルで、記号はcプログラムです)。ただし、これは無限ループを生成するようです。これを解決する方法はありますか?

そして、の意味は何ですか

sign < words | @sort > out

以下はcプログラムのコードです。

int main(){
    char words[80];
    scanf("%s", words);
    printf(words);
    string_sort(words);
    printf(" ");
    printf(words);
    printf("\n");

    while ( words != ""){
            scanf("%s", words);
            printf("%s", words);
            string_sort(words);
            printf("%s", " ");
            printf("%s", words);
            printf("\n");
    }
 }
4

4 に答える 4

1

プログラムが EOF に達すると、原因は常に真であり、変更されませscanf()ん。wordswords != ""

をテストする代わりに、 をテストwordsする必要がありますfeof(stdin)

于 2012-10-14T23:06:01.653 に答える
0

ファイルの最後に到達するとscanf、単語を見つけることができず、(words配列を変更せずに) 0 を返しますscanf。while ステートメントで次のように直接呼び出すことができます。while(scanf("%s", words) == 1)

于 2012-10-14T23:21:16.907 に答える
0

bash では、ファイルへの出力とファイルからの入力をリダイレクトするために>とが使用されます。<つまり< words、プログラムが標準入力を から読み取ることwords> out意味し、標準出力を に書き込むことを意味しoutます。

|パイプラインで 2 つのプログラムを接続するために使用され、最初のプログラムの出力が 2 番目のプログラムの入力に送られます。

したがってsign < words | @sort > out、2 つのプログラムsignとが実行され@sortます。 signはファイルから入力を取得し、その出力をプログラムwordsの入力に送信しますが、 の出力はファイルに送信されます@sort@sortout

于 2012-10-14T23:28:40.423 に答える
0

これは常に次の場合に当てはまりますchar words[80];

words != ""

これは...と同等であるため、&words[0] == &""[0]ポインターを比較するだけです.1つは begin of に等しく、もう1つは stringliteral をwords指しています""。それらは常に異なります。

あなたはおそらく次のことを意味していました:

strcmp(words, "") != 0

あるいは単に:

words[0] != 0
于 2012-10-14T23:39:25.483 に答える