2016-12-06 17 views
-3

なぜ分かりませんが、これはセグメンテーションフォルトを作成します。私は問題がファイルを読み込んで構造を編集するためのコードにあるとは思わない。ヘッドはダミーノードです。私は何が問題なのか分かりません。それは私を苛立たせます。誰かが私の理解を助けることができる?ファイルから読み込んでリンクリストに追加する

FOOD *New; 
FILE *fp = fopen(strcat(fileName,".txt"), "r"); 
if(fp==NULL) { 
    printf("File %s is not found.\n", strcat(fileName,".txt")); 
    return; 
} 
while(!feof(fp)){ 
    New = (FOOD*)malloc(sizeof(FOOD)); 

    for(i = 0; i < 9; i++){ 

     if(i == 0||i==1||i==2){ 
      fgets(scan, 256, fp); 
      if(i==0) strcpy(New->category, scan); 
      else if (i==1) strcpy(New->itemDescription, scan); 
      else strcpy(New->itemUnit, scan); 
      //printf("NO"); 
     } 

     else if (i==3||i==4||i==5){ 
      fscanf(fp, "%f", &fscan); 
      fgetc(fp); 
      if(i==3) New->basePrice = fscan; 
      else if(i==2) New->comboPrice = fscan; 
      else New->upgradePrice = fscan; 
      //printf("NO"); 
     } 

     else{ 
      fscanf(fp, "%i", &iscan); 
      fgetc(fp); 
      if(i==6) New->hierarchy = iscan; 
      else if (i==7) New->numberOfInitialInventory = iscan; 
      else New->numberOfPresentInventory = iscan; 
      printf("NO"); 
     } 


    } 
    if((*head)->next == NULL){ 
     (*head)->next = New; 
     temp = New; 
    } 
    else{ 
     temp->next = New; 
     temp = New; 
    } 


} 



fclose(fp); 

ここFOOD構造です:

typedef struct foodtag{ 
char category[256]; 
char itemDescription[256]; 
char itemUnit[256]; 
int hierarchy; 
int numberOfInitialInventory; 
int numberOfPresentInventory; 
float basePrice; 
float comboPrice; 
float upgradePrice; 
struct foodtag *prev; 
struct foodtag *next; 
}FOOD; 
+0

少なくとも 'FOOD'構造体を投稿する必要があります。最高の[MCVE](http://stackoverflow.com/help/mcve) – LPs

+0

フードの構造は何ですか? –

+0

セグメンテーションフォルトが発生した場合は、検査するコアファイル(ulimitに依存)が必要です。そうでない場合は、デバッガの下でプロセスを実行するだけでsegfaultで停止します。 – Useless

答えて

0

あなたはFOOD構造体のcategoryポインタにメモリを割り当てていません。

FOOD *my_food = malloc(sizeof(FOOD)); 
if (my_food != NULL) 
{ 
    my_food->category = malloc(256); 
    if (my_food->category != NULL) 
    { 
     // USAGE 
    } 
} 

編集の質問に私のコメントを形成:

why is while feof file always wrongを見てみましょう。

+0

これは固定されていますが、依然としてsegaultです –

0

(OPの代わりに掲示)

私はwhile(!feof(fp))を他の状態に置き換え、うまく動作しました。

関連する問題