0

次のサンプル コードを含む名前のない本から C を学ぼうとしています。

#include <stdio.h>

int main() {
    char word[10];
    int i = 0;
    while (scanf("%9s", word) == 1) {
        i = i+1;
        if (i % 2) {
            fprintf(stdout, "%s\n", word);
        } else {
            fprintf(stderr, "%s\n", word);
        }
        return 0;
    }
}

この例は、次のコマンドを実行して、出力を別のファイルにパイプする方法を示しています。

./thisprogram < input.txt > output.txt 2> error.txt

1 つおきの単語をそれぞれのファイルに出力することになっています。動作するはずですが、実行すると最初の単語だけが出力され、scanf が最初の値のみを取得する理由がわかりません。私はコードを正しくコピーしたと確信していますが、これをリストする正誤表はありません.

4

2 に答える 2

5

returnステートメントはブロック内にあるべきではありませんが、ブロックのwhile後にあります:

int main() {
    char word[10];
    int i = 0;
    while (scanf("%9s", word) == 1) {
        i = i+1;
        if (i % 2) {
            fprintf(stdout, "%s\n", word);
        } else {
            fprintf(stderr, "%s\n", word);
        }
        /* remove this: return 0; */
    }
    return 0; /* place it here */
}

そうしないと、最初の単語の抽出後にプログラムが終了します。

于 2012-06-15T22:59:53.150 に答える
0

あなたは非常にばかげた間違いをしました。

return statement内部に配置したwhile loopので、ループは1回だけ実行され、終了します。

Ideoneでコードを実行したところ、入力した最初の単語のみがコードに出力されていることがわかりました。

return statement終了後に配置while loopすると、コードが修正されます。

修正後、ここに表示されているように、コードは正常に実行されました。

お役に立てれば。

于 2012-06-16T01:58:21.667 に答える