C 编程 fprintf 问题

标签 c printf

在文本上写入文件时遇到问题。如您所见,我使用 \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 函数,其中包括行终止符。

所以从“test, test, test\n”开始,用 strtok 他会得到“test” “test” “test\n” 这样当它被保存回一个新的换行符时(忘记它)被添加到文件中。

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

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

(这是安全的,因为 fgets 本身返回一个以 null 结尾的字符串)

您还可以将 \n 添加到使用的分隔符中,您应该以相同的行为结束(不确定带有 strtok 的空标记,但 IIRC 它们只是被丢弃)。

关于C 编程 fprintf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4342361/

相关文章:

c - printf 具有固定总长度的双倍

创建头文件并在 C 中测试它

c++ - 为什么 printf 为非零 double 输出零?

c - printf() 的时间复杂度?

c - 意外的函数行为

c - 使用同一个数组重复存储数据

c - ARMv7汇编语言: How to reverse a char array and output it to another char array

java - 如何在Java中运行C代码

C:段错误,也许 GDB 在骗我

java - 如何在 Java 8 中使用自定义格式打印日期?