2016-12-02 13 views
0

fscanfでtest.txtファイルを読み込み、構造体の配列に格納しようとしています。私が試したコードを掲載しました。Cプログラミング:ファイルから読み込んで画面に表示

205,11.20,John Snow 
336,23.40,Winter is coming 
220,34.20,You know nothing 

ロード機能は、「アイテム」列にあるtest.txtファイルを読むためにloadinput機能を使用しています。ここでの問題は、これは私がtest.txtの中で持っているものであるロード機能で

であるように見えますのターゲットを「NoPtr」に設定します(この場合は3にする必要があります)。

ファイルを読み取った後、画面にも印刷しようとしていますが、動作しません。何も表示されません。

このプログラムはコンパイルされます。ここで間違っているのは何ですか?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

struct Item { 
    double value; 
    int unit; 
    char name[50]; 
}; 

int load(struct Item* item, char Name[], int* NoPtr); 
int loadinput(struct Item* item, FILE* data); 
void display(struct Item item, int variableA); 

int main(void) 
{ 
    struct Item FIN[3]; 
    int i, n; 
    load(FIN, "test.txt", &n); 
    for (i = 0; i < n; i++) 
    { 
     display(FIN[i],0); 
    } 
return 0; 
} 


int load(struct Item* item, char Name[], int* NoPtr) 
{ 
    struct Item ARR[3]; 
    int flagcheck; 
    FILE* fl; 
    fl = fopen("Name[]", "r"); 
    while (fl) 
    { 
     flagcheck = loadinput(&ARR, fl); 
     if (flagcheck < 0) 
     { 
      fclose(fl); 
      break; 
     } 
     else 
     { 
      *NoPtr++; 
     } 
    fclose(fl); 
    } 
return 0; 
} 

int loadinput(struct Item* item, FILE* data) 
{ 
    int ret = fscanf(data, "%d,%lf,", &item->unit, &item->value); 
    if (ret != 2) { 
      return -1; 
    } 
    fgets(item->name, sizeof item->name, data); 
    item->name[strlen(item->name)-1] = '\0'; 
    return 0; 
} 

void display(struct Item item, int variableA) 
{ 
printf("|%3d |%12.2lf| %20s |***\n", item.unit, item.value, item.name); 
return; 
} 
+5

'のはfopen( "名[]"、 "R");'、その後、ちょうどそれがチェックエラーなしで働いていたと仮定? 'Name []'はかなり奇妙なファイル名です... – John3136

+2

'fopen(Name、" r ");'? – bansi

+0

'item-> name [strlen(item-> name)-1]'終了しようとしている文字列に 'strlen'を使って文字列を終了しますか? – John3136

答えて

0

フィックスのデモを参照してください - BLUEPIXY

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

struct Item { 
    double value; 
    int unit; 
    char name[50]; 
}; 

int load(struct Item* item, char Name[], int* NoPtr); 
int loadinput(struct Item* item, FILE* data); 
void display(struct Item item, int variableA); 

int main(void) { 
    struct Item FIN[3]; 
    int i, n; 
    load(FIN, "test.txt", &n); 
    for (i = 0; i < n; i++) { 
     display(FIN[i],0); 
    } 
    return 0; 
} 

int load(struct Item* item, char Name[], int* NoPtr){ 
    *NoPtr = 0; 
    int flagcheck; 
    FILE* fl; 
    fl = stdin;//fopen(Name, "r");//for ideone 
    while (fl){ 
     flagcheck = loadinput(&item[*NoPtr], fl); 
     if (flagcheck < 0){ 
      fclose(fl); 
      break; 
     } else { 
      ++*NoPtr; 
     } 
    } 
    return 0; 
} 

int loadinput(struct Item* item, FILE* data){ 
    int ret = fscanf(data, "%d,%lf,", &item->unit, &item->value); 
    if (ret != 2) { 
     return -1; 
    } 
    fgets(item->name, sizeof item->name, data); 
    item->name[strlen(item->name)-1] = '\0'; 
    return 0; 
} 

void display(struct Item item, int variableA){ 
    printf("|%3d |%12.2lf| %20s |***\n", item.unit, item.value, item.name); 
    return; 
} 
関連する問題