我正在使用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);
只有第一行才能正常读取,之后的所有内容都会读取前一行的新行。
有人可以告诉我写这个东西的正确方法吗?
答案 0 :(得分:0)
不是一遍又一遍地调用fscanf(),并希望换行符合你想要的方式,使用fgets()
一次获取一行,使用fscanf()解析它,然后执行错误处理逐行的。这样可以减少错误,听起来它可以毫不费力地解决你的问题。
答案 1 :(得分:0)
您的问题是name
以换行符开头,该换行符最终会出现在文件中。
为了正确解析文件,我必须知道它的格式,但是现在我假设它是<string> <int> <int> <float>
,其中每个元素之间的空格数可能会有所不同。
我开始的格式字符串只是"%s%d%d%f"
,让fscanf()
处理空格。使用此格式字符串,我能够正确解析
foo 3 4 7
如果这不满足您,请随时详细说明您要解析的文件的格式,我会尝试提出解决方案。