繁体   English   中英

C编程fprintf问题

[英]C Programming fprintf issue

在文本上写文件时遇到问题。 正如您所看到的,我使用\\n将另一组数据放在下一行。 问题是当我关闭文件并再次保存每行的数据时,以\\n结束\\n\\n等等。 这就是为什么我的文件看起来像这样

首先要保存

 test, test, test
 test, test, test

第二个保存

 test, test, test

 test, test, test

第三个保存

test, test, test


test, test, test

这就是为什么当我在屏幕上显示它...之间有垃圾值...我的代码如下:

save(){
     int i = 0;
     FILE *stream = NULL;
     stream = fopen("student.txt", "wt");
     printf("\nSaving the student list directory. Wait a moment please...");
     printf("\nExiting the program...");
     for (i=0; i<recordCtr; i++){
        fprintf(stream, "%s, %s, %s\n", array[i]->studentID, array[i]->name, array[i]->course);  
     }                   
}

请帮助...任何建议将不胜感激。 先感谢您。

不知道你究竟做了什么,但如果你再次保存它之前解析文件可能你忘记从原始的最后一个字符串中删除旧\\n ..

编辑:这实际上是正确的。 OP使用fgets函数,其中包括行终止符。

因此,从strtok “test,test,test \\ n”开始,他将获得“test”“test”“test \\ n”,这样当它将被保存回来时,新的换行符(忘记它)被添加到文件中。

您可以通过将最后一个字符设置为null来修复它

linebuffer[strlen(linebuffer)-2] = '\0'

(它是安全的,因为fgets自己返回一个以null结尾的字符串)

你也可以添加\\n到使用的分隔符,你应该最终有相同的行为(不确定与strtok的空标记,但IIRC他们只是被丢弃)。

我猜这是在Windows上 - 改变你的行:

stream = fopen("student.txt", "wt");

至:

stream = fopen("student.txt", "wb");

你不会得到额外的\\r s。

或者,也许是最后一次你的琴弦fprintf ING已经在最后一个换行符。

我猜你的array[i]->course字段包含之前在上次保存中写的\\ n。 检查填充数组的代码,并确保它正在跳过换行符。

这里:

fgets(linebuffer, 45, stream);

如果有的话,从linebuffer删除尾随\\n

for (int i=strlen(linebuff)-1; i>=0 && linebuff[i]=='\n'; linebuff[i--]='\0');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM