CSV txtファイルから配列構造体にデータを取り込むプログラムを作成しています。このデータは在庫を管理するために使用されます。私はプログラム全体を動作させていましたが、実行するたびに突然クラッシュします。 Iv'eは私のファイルの読み込み機能にクラッシュを絞り込み、問題が見えるかどうか疑問に思っていました。ここに初期ファイルのデータがあります。ここでCSVファイルを構造体配列に読み込む
1000,1.49,3.79,10,0,Fish Food
2000,0.29,1.59,100,1,Angelfish
2001,0.09,0.79,200,0,Guppy
5000,2.40,5.95,10,0,Dog Collar (Large)
6000,49.99,129.99,3,1,Dalmatian Puppy
はここ
struct inventory_s
{
int productNumber;
float mfrPrice;
float retailPrice;
int numInStock;
char liveInv;
char productName[PRODUCTNAME_SZ];
};
構造体配列
struct inventory_s inventory[MAX_INVENTORY];
は、私はあなたが数の両方としてMAX_INVENTORY
を使用
FILE* pFile;
char *buf = malloc(MAX_INVENTORY);
char *info;
if ((pFile = fopen("inventory.txt", "r")) == NULL) //Reading a file
{
printf("File could not be opened.\n");
}
int i = 0;
while (fgets(buf, MAX_INVENTORY, pFile) != NULL)
{
if ((strlen(buf)>0) && (buf[strlen (buf) - 1] == '\n'))
buf[strlen (buf) - 1] = '\0';
info = strtok(buf, ",");
inventory[i].productNumber = atoi(info);
info = strtok(NULL, ",");
inventory[i].mfrPrice = atof(info);
info = strtok(NULL, ",");
inventory[i].retailPrice = atof(info);
info = strtok(NULL, ",");
inventory[i].numInStock = atoi(info);
info = strtok(NULL, ",");
inventory[i].liveInv = *info;
info = strtok(NULL, ",");
strcpy(inventory[i].productName, info);
i++;
}
fclose(pFile);
return 0;
このような問題をデバッグする方法は、デバッガを使用することです。また、まずは 'strtok'の各戻り値をチェックして失敗しなかったことを確認してください。 – kaylum
最後に余分な空白行を追加していませんか? kaylumが言ったように、あなたのコードはひどくフォーマットされた行には強固ではありません。 –
Cの勉強はいかがですか?あなたは前回(ユーザーアカウントの変更)に多くの同じ基本的な質問をしました。 Cの本を手に入れよう。宿題ヘルパーサイト。あなたはまずあなた自身で何らかの努力をすることが期待されます。 – Olaf