1

C構造体の配列があり、それをファイルにシリアル化しています。そのデータをメモリに再度取得する必要があります。

movie list[50]; //array

typedef struct{
    int code;
    int year;
    float price;
    char title[50];
    char director[30];
    char description[255];
} movie;

シリアル化されたデータの例

1|1990|9.900000|Hello world|Foo bar baz|lorem ipsum bla bla|
34|1994|4.900000|lorem ipsum|lorem ipsum|lorem ipsum|
23|1993|5.100000|lorem ipsum|lorem ipsum|lorem ipsum|
.
.
.

シリアル化するには、配列をトラバースし、すべてのプロパティを1行にfprintfします。

しかし、データを読み取るには、明らかな機能はありません

while( fscanf("%d|%d|%f|%s|%s|%s|",&list[i].code, &list[i].year, ...)!= EOF){
i++;
...
}
4

2 に答える 2

3

これは動作しません

sscanf(input,"%[ˆ|]|%[ˆ|]|%[ˆ|]",string1,string2,string3);

間違いは非常に微妙だったので、問題の答えを見つけるのに3時間近くかかりました。

sscanf(input,"%[^|]|%[^|]|%[^|]",string1,string2,string3);

問題はU.S International English、米国のMacBookでレイアウトキーボードを使用していることが原因である可能性があります。

これにより、^キー(Shift-6)がˆ子音を押すまでアクセントとして表示されるか、スペースバーを押すとアクセントが文字に変わりますが、この2つが異なるâ ê î ô ûことに気づきませんでした。ˆ^

英語についてはよくわかりませんが、少なくともポルトガル語では、文字ではない^ insは曲折アクセントと呼ばれ、子音に使用されてさまざまな発音を表します。

したがって、アメリカンキーボードを使用している場合は、Shift + 6を押してから、スペースバーを押して、^

于 2013-03-08T05:03:13.210 に答える
1

「明らかなことは機能しません」...それはあなたが関数のマンページを読んだときです:-(。

%sフォーマットは、文字列にヒットしても文字列の読み取りを停止しません... |fscanfのドキュメントを見ると、文字列に読み込まれる文字と変換の終了を制御できる別のフォーマット命令があることがわかります... 。

于 2013-03-08T03:19:15.580 に答える