2012-04-19 12 views
2

配列をファイルに書き込んでいますが、関数を呼び出すときに同じ情報をファイルから出力する方法が必要です。コードの最初の部分はmain関数にあり、2番目の関数はファイルからの値(fp)を出力する2番目の関数です。 PrintAGrue配列の文字列をC言語のファイルに書き込んで出力する

fp = fopen("Grue.txt", "wb"); 
for(i = 0; i < 5; i++) 
{ 
    char newLine[3] = {"\n"}; 
    char space[2] = {" "}; 
    fwrite(array[i].name, strlen(array[i].name), sizeof(char), fp); 
    fwrite(space, strlen(space), sizeof(char), fp); 
    fwrite(array[i].height, strlen(array[i].height), sizeof(char), fp); 
    fwrite(space, strlen(space), sizeof(char), fp); 
    fwrite(array[i].weight, strlen(array[i].weight), sizeof(char), fp); 
    fwrite(space, strlen(space), sizeof(char), fp); 
    fwrite(array[i].items, strlen(array[i].items), sizeof(char), fp); 
    fwrite(newLine, strlen(newLine), sizeof(char), fp); 
} 
fclose(fp); 
fp = fopen("Grue.txt", "rb"); 
PrintAGrue(fp); 


void PrintAGrue(FILE *a) 
{ 
// create End of file character onto the array being saved, 
int i; 
char n; 
char h; 
char w; 
char m; 

for (i=0; i<5; i++) 
{ 
    n = fread(a[i].name, strlen(array[i].name, sizeof(char), a); 
    h = fread(array[i].height, strlen(array[i].height, sizeof(char), a); 
    w = fread(array[i].weight, strlen(array[i].weight, sizeof(char), a); 
    m = fread(array[i].items, strlen(array[i].items, sizeof(char), a); 

    printf("This grue is called %s and is %s feet tall, and weighs %s pounds, and has eaten %s things.", n, h, w, m); 
} 

}

+1

これを試してみるとどうなるのですか? –

答えて

1

あなたが読むためにどれだけのデータを決定するstrlen()呼び出しを使用しているように、それが見えます - しかし、 あなたが前に文字列の大きさを知ることができますどのようにしましたそれを読んで?

はおそらく、あなたのファイル形式を明示的に各文字列の長さフィールドを含むべきである(また、括弧は...バランス見ていない) - あなたが 文字列のサイズを見つけるために、1 freadを行うことができ、かつ実際に別の文字列を読んでください。

関連する問題