2

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

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);
}

}

4

1 に答える 1

1

では、呼び出すデータ量を決定するために呼び出しをPrintAGrue使用しているように見えますが、文字列を読み取るに、文字列のサイズをどのように知ることができますか?(また、括弧はバランスが取れていないように見えます...)strlen()

おそらく、ファイル形式には各文字列の長さフィールドを明示的に含める必要があります。次に、1つを実行freadして文字列サイズを検索し、もう1つを実行して実際に文字列を読み取ることができます。

于 2012-04-19T21:53:14.080 に答える