-1

バイナリファイル処理を使用して、Cで記録管理プログラムをコーディングしています。私はCode::Blocksを使用しており、gccを使用してWindows8でCプログラムをコンパイルしています。

プログラムが次のブロックに到達すると、エラーメッセージが表示されます。

ここに画像の説明を入力してください

私のコード:

int dispaly(student record[], int count)
{

/*
This is what structure `student` looks like:

 int id;
    char name[200], phone[20], address[200], cclass[50];
    char sec[20], roll[50], guardian_name[200], relation[200] ;
    char p2_colg[100], slc_school[200];
    float plus2_percent, slc_percent;
    struct date dob;
    struct date enr_date;


    struct date looks like
       int day, month, year;
*/
printf("Reached"); /*Program Runs Fine upto here*/
int i = 0;
for(i=0; i<count; i++)
{
    printf("\nId: %d\tPhone: %s\nName: %s\nAddress: %s"
           "\nClass: %s\tSection: %s\nRoll: %s\nGuardian Name: %s\tRelation:%s"
           "\nPlus-Two in: %s\tPercentage:%f\nSLC School: %s\tPercentage: %f"
           "\nDate Of Birth(mm/dd/yyyy): %d/%d/%d"
           "\nEnrolled in (mm/dd/yyyy): %d/%d/%d\n\n---------------------------------------\n", record[i].id, record[i].name, record[i].address
           , record[i].cclass, record[i].sec, record[i].roll, record[i].guardian_name, record[i].relation, record[i].p2_colg
           , record[i].plus2_percent, record[i].slc_school, record[i].slc_percent, record[i].dob.month, record[i].dob.day, record[i].dob.year
           , record[i].enr_date.month, record[i].enr_date.day, record[i].enr_date.year);

}
getch();
return 0;
}

プログラムはエラーや警告なしでコンパイルされます。

どうしたの?

4

2 に答える 2

5

配列内の正確なデータを見ずに何がクラッシュしたかを正確に知ることは困難ですが、printfの引数リストで「phone」を忘れたため、printf内でクラッシュが発生する可能性があります。

于 2012-11-26T04:23:33.237 に答える
1

それらすべてを1つの呼び出しに積み上げるのにそれほど良い理由はありません。各行を独自の行に分割すると、欠落している「電話」のバグを見つけるのが簡単になりますprintfrecord[i]また、ポインタにキャプチャした場合、冗長性を減らすことができます。

対比:

student * r = &record[i];

printf("\n");

printf("Id: %d\tPhone: %s\n", r->id, r->phone);

printf("Name: %s\n", r->name);

printf("Address: %s\n", r->address);

printf("Class: %s\tSection: %s\n", r->cclass, r->sec);

printf("Roll: %s\n", r->roll);

printf("Guardian Name: %s\tRelation:%s\n", r->guardian_name, r->relation);

printf("Plus-Two in: %s\tPercentage:%f\n", r->p2_colg, r->plus2_percent);

printf("SLC School: %s\tPercentage: %f\n", r->slc_school, r->slc_percent);

printf("Date Of Birth(mm/dd/yyyy): %d/%d/%d\n",
       r->dob.month, r->dob.day, r->dob.year);

printf("Enrolled in (mm/dd/yyyy): %d/%d/%d\n"
       r->enr_date.month, r->enr_date.day, r->enr_date.year);

printf("\n");

printf("---------------------------------------\n");

技術的な意味では、を複数回呼び出すと関数呼び出しのオーバーヘッドprintfが発生します。また、配列内の現在の学生のポインター変数を宣言すると、いくらかのストレージスペースが発生します。しかし、それは基本的に無視できるものであり、このような場合には何の影響もありません。内部的には、出力はとにかくバッファリングされます。

于 2012-11-26T04:36:21.060 に答える