私は C が初めてで、私のクラスでは、ファイル内のすべての項目を読み取り、それらを動的に作成されたリストでファイル順に返す関数を作成する必要があるプロジェクトがあります。ファイルの各行は 1 つの項目であり、次の形式になっています。
'<description>' <damage> <cost> <weight>
ファイル内のアイテムへのベース ポインターをファイル順に返すか、ファイルが存在しない場合は NULL を返すことになっています。
これまでの私のコードは次のとおりです。
item_t *ReadItemsFromFile(char *file)
{
typedef struct item item_t;
struct item
{
char name[32];
float cost, weight;
int dam;
};FILE *fpin = fopen(file, "r");
if(fpin != NULL)
{
item_t i[20];
int n = 0;
char line[sizeof(file)];
while(fgets(line, sizeof(line), fpin) != NULL){
(fscanf(fpin, " '%[^']' %d %f %f", i[n].name, &i[n].dam, &i[n].cost, &i[n].weight));
fputs(i[n].name, stdout);
n++;
}
} else {
return NULL;
}
return(0);
}
コードをテストするために fputs を使用してきましたが、最初と最後の項目が意味不明になります。また、入れてみると
fputs(&i[n].dam, stdout);
そのため、構造体の他の変数をテストできますが、「互換性のないポインター型から 'fputs' の引数 1 を渡しています。
fscanfを使用して構造体変数に正確に渡しているのか、それとも別のものなのかはわかりません。