私はこの本の 3 つのプログラムの問題に取り組んできました: C How to Program - Deitelそれらは第 11 章のファイルの管理 (順次およびランダム アクセス ファイル) に関連しています。ランダム アクセス ファイルの 3 つの例 (作成、読み取り、書き込み) を実行できませんでした。3 つの予期しない動作が発生しました。私に見せてください:
最初に、ランダム アクセス ファイル クリエーターを実行しましたが、奇妙なことは何もなく、終了メッセージが表示されます。
次に、ランダムアクセス値ファイルの書き込みをコンパイルして値を入力しますが、奇妙なことは何もありません。
3 番目に、hare 戦略を使用し、メモ帳で .dat ファイルを読み込んで、データが適切に保存されたかどうかを確認します。そして、驚きのゴミが表示されます。そして、よく考えたのですが、二重表現が読み取りプログラム (メモ帳) と一致していない可能性があります。というわけで第四段階へ。
4 番目に、ランダム アクセス ファイルの読み取りプログラムをコンパイルします。驚いたことに、表示されたデータは私が入力したものではありません。
この質問をここに投稿したくなかったのは、もっと重要な質問ともっと興味深い質問があることを知っているからですが、私が間違ったことを見つけることができず、しばらく探していて、最終的に専門家に尋ねることにしました. 以下に SC を残します (ありがとう!):
/*To create the file*/
#include <stdio.h>
struct clientsData{
int account;
char lastname[ 30 ], name[ 30 ];
double balance;
};
int main(void)
{
int i;
struct clientsData client = { 0, "", "", 0.0 };
FILE *cfPtr;
if( ( cfPtr = fopen( "clients.dat", "wb" ) ) == NULL ) {
printf( "File couldn't be opened. " );
}
else{
printf( "Generating\n" );
for ( i = 1; i <= 10000; i++ ){
printf( "-" );
fwrite( &client, sizeof( struct clientsData ), 1, cfPtr );
}
fclose( cfPtr );
}
printf( "\nFile succesfully created\n" );
return 0;
}
/* To write the file */
#include <stdio.h>
struct clientsData{
int account;
char lastname[ 30 ], name[ 30 ];
double balance;
};
int main(void)
{
FILE *cfPtr;
struct clientsData client = { 0, "", "", 0.0 };
if( ( cfPtr = fopen( "clients.dat", "rb+" ) ) == NULL ) {
printf( "File couldn't be opened. " );
}
else{
printf( "Enter account number"" ( 1 to 10000, 0 to end the input )\n?" );
scanf( "%d", &client.account );
while( client.account != 0 ){
printf( "Enter the lastname, firstname and the balance\n?" );
fscanf( stdin, "%s%s%lf", client.lastname, client.name, &client.balance );
fseek( cfPtr, ( client.account - 1 ) * sizeof( struct clientsData ), SEEK_SET );
fwrite( &client, sizeof( struct clientsData ), 1, cfPtr );
printf( "Enter account number\n?" );
scanf( "%d", &client.account );
}
fclose( cfPtr );
}
return 0;
}
/*To read the File*/
#include <stdio.h>
struct clientsData{
int account;
char lastname[ 30 ], name[ 30 ];
double balance;
};
int main(void)
{
FILE *cfPtr;
struct clientsData client = { 0, "", "", 0.0 };
if( ( cfPtr = fopen( "clients.dat", "rb" ) ) == NULL ) {
printf( "File couldn't be opened. " );
}
else{
printf( "%-6s%-16s%-11s%10s\n", "Acct", "Lastname", "Firstname", "Balance" );
while( !feof( cfPtr ) ){
fread( &client, sizeof( struct clientsData ), 1, cfPtr );
if( client.account != 0 ){
printf( "%-6d%-16s%-11s%10.2f\n", &client.account, client.lastname, client.name, &client.balance );
}
}
fclose( cfPtr );
}
return 0;
}