fprintf无法正常工作

时间:2014-08-08 00:48:39

标签: printf fgets

我遇到了这段代码的问题。它应该从文件中读取字母并将其写入另一个文件中,如下例所示

in.txt:

AAAAAAAAAABCCCCC
AAAAAAAAAAAAAAAAAAAA
BBCDERFG

out.txt

10A1B5C
20A
2B1C1D1E1R1F1G

但我继续得到这个......

out.txt

10A1B5C
20A
2B1C1D1E1R1F1G 1A11.

你能告诉我为什么我无法得到我想要的地方吗?提前谢谢你

#include <stdio.h>
#include <stdlib.h>
#define MAX_STRING 514

int main(int argc, char *argv[])
{
    if(argc!=3) {
        fprintf(stderr, "Exactly 3 arguments required");
        exit(EXIT_FAILURE);
    }
    FILE *in;
    FILE *out;
    int i=0, k=0;
    char buffer[MAX_STRING];
    char string[MAX_STRING];
    in = fopen(argv[1], "r");
    if(in==NULL) {
        fprintf(stderr, "Couldn't open the file %s", argv[1]);
        exit(EXIT_FAILURE);
    }
    out=fopen(argv[2], "w");
    if(out==NULL) {
        fprintf(stderr, "Couldn't open the file %s", argv[2]);
        exit(EXIT_FAILURE);
        }
    while(fgets(buffer, MAX_STRING, in)!= NULL) {
        i=0;
        while(buffer[i]!='\n') {
            if(buffer[i]==buffer[i+1]) {
                k++;
                i++;
            }
            else {
                fprintf(out, "%c%d", buffer[i], k+1);
                i++;
                k=0;
            }
        }
        fprintf(out, "\n");
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您可能在文件末尾没有\n。所以这个循环:

while(buffer[i]!='\n')

不会停止并会考虑所有缓冲区(包括之前的字符):

BBCDERFGAAAAAAAAAAAA

答案 1 :(得分:0)

我怀疑没有&#34; \ n&#34;在最后一行的末尾 - 因此缓冲区仍然是“满”的。 &#34; A&#34;来自前一行(即缓冲区末尾有11个A)。

看看这个:Return value of fgets()

而不是寻找&#34; \ n&#34;确定缓冲区的结束,检查&#34; \ 0&#34; (最后将由fgets()注入)。 即。

while(buffer[i]!='\0') 
{
  ...
}