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

并且应该将每隔一个单词输出到相应的文件中。看起来它应该可以工作,但是当我运行它时,只会输出第一个单词,我不明白为什么 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因此您的循环仅运行一次并终止。

我在Ideone上运行了你的代码,发现你的代码只打印了你输入的第一个单词。

放在末尾return statement之后while loop,您的代码将被更正。

更正后,代码运行成功,如您在此处看到的。

希望这可以帮助。

于 2012-06-16T01:58:21.667 回答