0
 char string[50], s[50];
 File *f = tmpfile();
 count = 1;

 while (fgets(string, 50, stdin)) {
    if (string[0] == '!') {
        rewind(f);
    } else {
        fwrite(string, 50, 1, f);
    }

    if (strcmp("history\n", string) == 0) {
        rewind(f);
        while(fgets(s, 50, f)) {
            printf("\t%d  %s", count, s);
            count++;
        }
        count = 1;
    }
 }

这段代码的上下文不是很重要。问题是假设fgets接受“ls”、“date”和“history”。结果输出是:

1  ls
2   3  te
4   5  ory
6 

它应该是:

1  ls
2  date
3  history
4

1 回答 1

0

由于将评论标记为答案的功能请求仍然被拒绝,因此我在此处复制上述解决方案。

看起来你的缓冲区中有一些 '\r's。你可能应该只 fwrite strlen(string) 个字节。——丹尼尔·费舍尔

于 2014-03-27T13:00:20.783 回答