【问题标题】:Cannot write in separate lines in a TXT files in C无法在 C 中的 TXT 文件中的单独行中写入
【发布时间】:2013-01-09 13:23:13
【问题描述】:

好的,所以我有一个客户结构,我正在尝试将客户的每个属性写入文本文件的单独行中。这是代码

custFile = fopen ("customers.txt", "w+");
fprintf(custFile, "%s", cust[cust_index].name);
fprintf(custFile, "\n");
fprintf(custFile, "%s", cust[cust_index].sname);
fprintf(custFile, "%s", cust[cust_index].id);
fclose(custFile);

数据是文本文件的形式,一行输出

数据很好,只是打印在一行中。当我给我的朋友我的代码时,它可以正常工作。

P.s 我不知道这是否有什么不同,但我是在 mac 上编程

【问题讨论】:

  • 不要刷新标准输入,这是未定义的行为。
  • 可以从stackoverflow.com/questions/1402673/…中已经给出的答案中推断出有关此行为的解释
  • \r 不是 Mac 上的换行符吗?

标签: c file text lines


【解决方案1】:

您的代码只为 3 个字段添加了一个换行符。这可能是您遇到的问题的原因吗?如果不是,请注意旧 Mac 上的一些旧应用可能需要\r 行分隔符。

如果您分解出一个函数并使用它来写入所有记录并测试不同的行分隔符,您可以解决这两个问题

static void writeCustomer(FILE* fp, const Customer* customer,
                          const char* line_separator)
{
    fprintf(fp, "%s%s%s%s%s%s", customer->name, line_separator,
                                customer->sname, line_separator,
                                customer->id, line_separator);
}

会像这样被调用

writeCustomer(custFile, &cust[cust_index], "\n"); /* unix line endings */
writeCustomer(custFile, &cust[cust_index], "\r\n"); /* Windows line endings */
writeCustomer(custFile, &cust[cust_index], "\r"); /* Mac line endings */

请注意,某些应用程序不会为其中某些行尾显示换行符。如果您关心在特定编辑器中的显示,请检查它们具有不同行尾的功能。

【讨论】:

  • \r 不是 mac 上的换行符。 \n 是。 windows 和所有其他相关系统之间的唯一区别是 windows 有时会写一个\r\n。但是使用\r 作为行分隔符的mac 是.. 错误的。 en.wikipedia.org/wiki/Newline
  • @user1961411:不,你的错是你没有在fprintf 调用中使用ANY 换行符。 “%s”的意思是“打印一个字符串”而不是“打印一个字符串并包含换行符”。
  • @akira 您发布的维基百科链接和this previous SO question 都表示最近的 Mac 使用 \n 作为换行符,但较旧的 Mac 使用 \r。我更新的答案更好还是您仍然认为它是错误的?
  • @simonc:你知道你的 mac 需要多大年纪才能使用\r 作为行尾吗?您是否认为 10 年以上与将答案的那部分放在首位一样重要?充其量只是一个旁注,只需使用\n 并完成。 Windows 上的写字板可以很好地打开这些文件,地球上任何其他理智的文本编辑器都喜欢\n
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 2016-01-08
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多