私は航空券予約をして予約したチケットを表示し、チケットのキャンセルを行う航空会社の予約システムを作成しようとしています。今のところ、コードは予約チケットのみを実行して終了します。航空会社の予約システムc
予約チケットのために1を押すと、オプションを受け取りますが、ConsoleApplication1.exeの0x0FFAFBB3(ucrtbased.dll)に例外がスローされます。0xC0000005:0x0004B000のアクセス違反を書き込むアクセス違反です。
コードは以下のとおりです。誰でもコード内のエラー領域を特定できますか?
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
void initialize();
void reserve();
struct passengers {
char* firstname;
char* surname;
char* passport;
};
passengers passenger[10];
void initialize()
{
for (int a = 0; a < 10; a++) {
passenger[a].passport = "";
passenger[a].firstname = "";
passenger[a].surname = "";
}
}
void pause()
{
printf("\n");
system("pause");
system("cls");
}
int main() {
int seat = 0;
initialize();
int choice;
do {
system("cls");
printf("\n\n\t\t*************************************\n\n");
printf("\t *****Welcome To airline reservation system*****\n\n");
printf("\t\t\t ******************");
printf("\n\n\t\t 1. RESERVE SEAT");
printf("\n\n\t\t 2. CANCEL SEAT");
printf("\n\n\t\t 3. DISPLAY SEAT LAYOUT");
printf("\n\n\t\t 4. EXIT SYSTEM");
scanf_s("%d", &choice); fflush(stdin);
switch (choice) {
case 1: reserve();
break;
case 2: cancel();
break;
case 3: display();
break;
case 4: exit(0);
break;
default:
printf("\nInvalid Choice");
}
} while (choice != 4);
_getch();
}
void reserve()
{
int seat = 0;
passenger[seat].firstname = (char*)malloc(15);
passenger[seat].surname = (char*)malloc(15);
passenger[seat].passport = (char*)malloc(9);
for (int a = 0; a < 10; a++)
{
if (passenger[a].passport == "")
{
seat = a;
break;
}
}
if (seat < 10)
{
printf("\n\t\t Enter First Name:");
scanf_s("%s", passenger[seat].firstname);
printf("\n\t\t Enter Surname:");
scanf_s("%s", passenger[seat].surname);
printf("\n\t\t Enter Passport Number:");
scanf_s("%s", passenger[seat].passport);
}
else {
printf("\n\t\t Sorry, No seats are available");
}
pause();
}
まず、 'passengers passenger [10];'はコンパイルすべきでなく、リンクと実行がずっと少なくなければならないので、これをC++コンパイラに似たものでコンパイルしているとします。そして、あなたは 'main()'の後に '{'を忘れてしまったように思えます。あなたの例外に関しては、文字列読み込みのためのスペースを割り当てないので、それは未定義の動作を呼び出します。 – WhozCraig
'乗客乗客[10];'構造乗客乗客[10]; 'すべてのものを書き換えてください。それはあまりにも多くの混乱です! – iSS
デバッガを使用して問題を自分でデバッグする方法を学びます。 – kaylum