1

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

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);

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

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

Ps 我不知道这是否有什么不同,但我正在 Mac 上编程

4

1 回答 1

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 */

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

于 2013-01-09T13:27:12.733 回答