fprintf在文件的开头打印一个新行

时间:2012-01-22 18:50:53

标签: c file-io printf

我正在使用fprintf函数打印到新文件

我正在使用以下命令多次写入:

fprintf(fp, "%-25s %d %.2f %d",temp->data.name, temp->data.day, temp->data.temp, temp->data.speed);

问题是有时文件会获得一个额外的新行作为第一个字符。 这可能是一些缓冲区,我真的不知道......

typedef struct Data {
    char name[26];
    int day;
    int speed;
    float temp;
} Data ;

@spatz你是对的,我对字符串格式的东西很新,我被告知要为fscanf制作一个我想要在数据位之间有一定数量的空间,这就是我的意思想出来了,我很确定它是问题的根源:

check=fscanf(fp1, "%20c%*[^0-9]%d%*[^0-9]%f%*[^0-9]%d%*[^\n]%*c", name, &day, &temp, &speed);

只有第一行才能正常读取,之后的所有内容都会读取前一行的新行。

有人可以告诉我写这个东西的正确方法吗?

2 个答案:

答案 0 :(得分:0)

不是一遍又一遍地调用fscanf(),并希望换行符合你想要的方式,使用fgets()一次获取一行,使用fscanf()解析它,然后执行错误处理逐行的。这样可以减少错误,听起来它可以毫不费力地解决你的问题。

答案 1 :(得分:0)

您的问题是name以换行符开头,该换行符最终会出现在文件中。

为了正确解析文件,我必须知道它的格式,但是现在我假设它是<string> <int> <int> <float>,其中每个元素之间的空格数可能会有所不同。

我开始的格式字符串只是"%s%d%d%f",让fscanf()处理空格。使用此格式字符串,我能够正确解析

之类的行
foo     3   4 7  

如果这不满足您,请随时详细说明您要解析的文件的格式,我会尝试提出解决方案。