C编程fprintf问题

new*_*bie 3 c printf

在文本上写文件时遇到问题.正如您所看到的,我曾经\n在下一行添加了另一组数据.问题是,当我关闭该文件,并再次保存与结束每行数据\n变得\n\n等等.这就是为什么我的文件看起来像这样

首先要保存

 test, test, test
 test, test, test
Run Code Online (Sandbox Code Playgroud)

第二个保存

 test, test, test

 test, test, test
Run Code Online (Sandbox Code Playgroud)

第三个保存

test, test, test


test, test, test
Run Code Online (Sandbox Code Playgroud)

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

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);  
     }                   
}
Run Code Online (Sandbox Code Playgroud)

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

Jac*_*ack 5

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

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

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

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

linebuffer[strlen(linebuffer)-2] = '\0'
Run Code Online (Sandbox Code Playgroud)

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

您还可以添加\n使用的分隔符,您应该最终使用相同的行为(不确定strtok的空标记,但IIRC它们只是被丢弃).