【问题标题】:fprintf not working properlyfprintf 无法正常工作
【发布时间】:2014-08-08 00:48:39
【问题描述】:

我的代码有问题。它应该从文件中读取字母并将它们写入另一个文件,如下例所示

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;
}

【问题讨论】:

    标签: printf fgets


    【解决方案1】:

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

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

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

    BBCDERFGAAAAAAAAAAAA
    

    【讨论】:

      【解决方案2】:

      我怀疑最后一行的末尾没有“\n” - 因此缓冲区仍然“充满”前一行的“A”(即缓冲区末尾有 11 个 A) .

      看看这个:Return value of fgets()

      不是寻找“\n”来确定缓冲区的结尾,而是检查“\0”(最后将由 fgets() 注入)。 即

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

      【讨论】:

      • 它还不工作。为了使它工作,无论我使用 while(buffer[i]!='\n') ot buffer[i]!='\0',我都必须在 in.txt 文件上添加 /n。我明白你想说什么,但我还是想不通
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 2016-09-01
      • 2012-07-11
      • 2018-04-08
      相关资源
      最近更新 更多