2017-11-25 107 views
0

私はC言語とプログラミング一般にはかなり新しいので、私の問題は不明です。私はコードを実行し、新しい出力ファイルを開くたびに、構造体のデータは唯一のゼロです。ここに私のコードです....私は質問の一番下にテキストファイルの内容を入れました。前もって感謝します。(C言語)、テキストファイルを構造体の配列に読み込んで配列に新しいテキストファイルを書き込む

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


typedef struct { 
int id; 
char description[40]; 
double mancost; 
double sellprice; 
} ItemInfo; 


int readInfo(ItemInfo input[]); 
void listData(ItemInfo input[], int i); 

int main(){ 

ItemInfo input [200]; 
int i; 
i = readInfo(input); 
listData (input, i) ; 
return 0; 
} 


int readInfo(ItemInfo input[]) { 
FILE *fin; 
int i = 0; 

fin = fopen("C:/Users/ecrooks98/CLionProjects/untitled5/p6-initial.txt", "r"); 

if(fin == NULL) { 
    printf("File cannot be opened\n"); 
} 
else { 
    while(!feof(fin)) { 
     fscanf(fin, "%d\t", &input[i].id); 
     fscanf(fin, "%39[^\t\n]s\t", input[i].description); 
     fscanf(fin, "%lf\t", &input[i].mancost); 
     fscanf(fin, "%lf\n", &input[i].sellprice); 
     i++; 
    } 

    fclose(fin); 
} 

return i; 
} 
void listData(ItemInfo input [], int i) { 
FILE *fout; 
int j; 

fout = fopen("output.txt", "w"); 


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

     fprintf(fout, "%d\t", input[i].id); 
     fprintf(fout, "%s\t", input[i].description); 
     fprintf(fout, "%lf\t", input[i].mancost); 
     fprintf(fout, "%lf\n", input[i].sellprice); 
    } 
} 

iも入力しています私のテキストファイルは、この

2250 shoes 3.00 80.00 
2251 hat .50 20.00 
2252 iphone .10 600.00 
2253 grill 80.00 100.00 
+2

'listData'関数では、 'input [j] .id'と' [i] 'ではなく、残りの部分を出力する必要があります。 –

答えて

0

のように見えるあなたの変換が成功したことを、確認するためにfscanf()の戻り値をチェックする必要があります。

ブラケットマッチャ%39[^\t\n]を使用する場合は、末尾sが必要と別々の一致文字として見られていません。あなたの入力が1つの単語だけで構成されている場合は、%39sを使用することをお勧めします。それ以外の場合は%39[^\t]を使用してください。

さらに、4つのコールに分割する必要はありません。すべてを1つにすることができます。そして、正確なタイプの空白にマッチさせるべきではありません。シンプルなスペースは、そのトリックを行うべきです。これにより、次のような結果が得られます。

int st; 

do { 
    st = fscanf(fin, "%d %39s %lf %lf ", 
       &input[i].id, 
        input[i].description, 
       &input[i].mancost, 
       &input[i].sellprice); 
    i++; 
} while (st == 4); 

SteveSummitはコメントで指摘したようにjがあなたのループ(大漁、スティーブ!)のカウンタ変数であるため、

さらに、あなたは、あなたのlistData() -functionに出力input[j].*を持っています。

関連する問題