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

データはテキストファイルから1行で出力されます

データは問題なく、1行で印刷されます。友達にコードを渡したところ、正常に機能しました。

PS私はそれが何か違いを生むかどうかわかりませんが、私はMacでプログラミングしています

4

1 に答える 1

1

コードは、3つのフィールドに1つの改行のみを追加します。これがあなたが遭遇した問題を説明している可能性はありますか?そうでない場合、古い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 に答える