gpt4 book ai didi

c - C语言的机票预订系统

转载 作者:行者123 更新时间:2023-11-30 21:08:10 25 4
gpt4 key购买 nike

我正在尝试创建一个航空预订系统,该系统应该预订机票,显示预订的机票,并取消机票。我已经使用数组结构编写了代码。目前,代码仅执行预订票并退出。

但是,当我按 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();

}

最佳答案

您有很多问题,这些应该会有所帮助。但您可能需要解决其他人强调的问题:

  1. scanf_s 应该传递 %s 的大小参数,您使用它就像使用 scanf 而不是 scanf_s 请参阅此处:https://msdn.microsoft.com/en-us/library/w40768et.aspx

  2. 您没有使用 malloc() 或其他方式为字符串分配空间。因此,当 scanf_s 尝试写入输入的值时,它将踩踏变量指向的任何内容。我认为这不是可写内存。

  3. 您引用的是结构中指针字段的地址,而不是为该指针分配内存并传递该指针字段中的值:

    • 分配:Passenger[seat].firstname=(char*)malloc(MAX_FIRSTNAME_SIZE);

    • 更改:'&passenger[seat].firstname' 到 'passenger[seat].firstname'

另外(如果我弄错了,请原谅我)它看起来像是一个学期末项目或一个测试问题。不管这个建议多么不受欢迎:我建议您查看一些有关设置断点和使用 Visual Studio 调试器的文档。即使只是在 Debug模式下运行项目也会将您带到错误发生的位置。这将帮助您更好地学习该技能,并在您需要在测试中执行此操作时节省宝贵的时间。

希望有帮助。

关于c - C语言的机票预订系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40063799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com