
上午之前還可以運行,不知道為啥什么也沒動突然就報錯。
斷點除錯的時候,發現字符陣列全都是燙
一旦到了錄入字串的時候就出錯。
試了VC,幾乎一樣樣的代碼,VC卻可以正常運行
當然修改了scanf為scanf_s
是我結構體指標用錯了嗎?可是也不至于兩個軟體一個可以一個不行吧

#include <stdio.h>
#include <windows.h>
#define MAX 100
//書結構體
struct Book
{
char book_name[30];
unsigned int book_id;
double book_price;
};
//書錄結構體
struct library
{
struct Book book_array[MAX];
unsigned int book_num;
};
//顯示選單
void show_menu()
{
printf("SSSSSSSSSSSSSSSSSSSSSSSSSSS\n");
printf(" \n");
printf(" 圖書超市管理系統v1.0 \n");
printf(" 1.圖書基本資訊管理 \n");
printf(" 2.購書結算處理 \n");
printf(" 3.售書歷史記錄 \n");
printf(" 0.退出系統 \n");
printf(" \n");
printf("EEEEEEEEEEEEEEEEEEEEEEEEEEE\n");
}
//添加圖書
void add_book(struct library * lib)
{
if (lib->book_num >= MAX)
{
printf("書的數量已達最大值。\n");
system("pause");
system("cls");
return;
}
fflush(stdin);
printf("請輸入書的名稱:\n");
scanf_s("%s", lib->book_array[lib->book_num].book_name);
printf("請輸入書的ID:\n");
scanf_s("%ud", &lib->book_array[lib->book_num].book_id);
printf("請輸入書的價格:\n");
scanf_s("%lf", &lib->book_array[lib->book_num].book_price);
lib->book_num++;
printf("添加成功!\n");
system("pause");
system("cls");
}
//顯示圖書
void show_book(struct library * lib)
{
if (lib->book_num == 0)
{
printf("當前記錄為空。\n");
system("pause");
system("cls");
return;
}
int i = 0;
printf("書名\tID\t售價\n");
for (i = 0; i < lib->book_num; i++)
{
printf("%s\t%u\t%.2lf\n", lib->book_array[i].book_name, lib->book_array[i].book_id, lib->book_array[i].book_price);
}
system("pause");
system("cls");
}
//查找圖書位置
int find_book(struct library * lib)
{
}
//圖書基本資訊管理
void book_management(struct library * lib)
{
int choise;
system("cls");
while (1)
{
printf("***************************\n");
printf("* 圖書基本資訊管理 *\n");
printf("*1.添加圖書 *\n");
printf("*2.洗掉圖書 *\n");
printf("*3.修改圖書 *\n");
printf("*4.查找圖書 *\n");
printf("*5.展示圖書 *\n");
printf("*0.退出功能 *\n");
printf("***************************\n");
scanf_s("%d", &choise);
switch (choise)
{
case 1:
add_book(lib);
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
show_book(lib);
break;
case 0:
return;
default:
printf("輸入錯誤,請重新選擇!\n");
system("pause");
break;
}
system("cls");
}
}
int main()
{
int choise;
struct library lib;
lib.book_num = 0;
system("color f0");
printf("***************************\n");
printf("***************************\n");
printf("* *\n");
printf("*歡迎使用圖書超市管理系統!*\n");
printf("* *\n");
printf("***************************\n");
printf("***************************\n");
system("pause");
system("cls");
while (1)
{
show_menu();
scanf_s("%d",&choise);
switch (choise)
{
case 1:
book_management(&lib);
break;
case 2:
break;
case 3:
break;
case 0:
return 0;
default:
printf("輸入錯誤,請重新選擇!");
system("pause");
break;
}
system("cls");
}
}
uj5u.com熱心網友回復:
0xC0000005大多是指標越界或者訪問未分配的地址導致。字符陣列全都是燙,是因為陣列沒有初始化,結構體申請完后,
需要memset下
uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
//#include <windows.h>
#define MAX 100
//書結構體
struct Book
{
char book_name[30];
unsigned int book_id;
double book_price;
};
//書錄結構體
struct library
{
struct Book book_array[MAX];
unsigned int book_num;
};
//顯示選單
void show_menu()
{
printf("SSSSSSSSSSSSSSSSSSSSSSSSSSS\n");
printf(" \n");
printf(" 圖書超市管理系統v1.0 \n");
printf(" 1.圖書基本資訊管理 \n");
printf(" 2.購書結算處理 \n");
printf(" 3.售書歷史記錄 \n");
printf(" 0.退出系統 \n");
printf(" \n");
printf("EEEEEEEEEEEEEEEEEEEEEEEEEEE\n");
}
//添加圖書
void add_book(struct library * lib)
{
if (lib->book_num >= MAX)
{
printf("書的數量已達最大值。\n");
system("pause");
system("cls");
return;
}
fflush(stdin);
printf("請輸入書的名稱:\n");
//scanf_s("%s", lib->book_array[lib->book_num].book_name);
scanf_s("%s", lib->book_array[lib->book_num].book_name, 30);
printf("請輸入書的ID:\n");
//scanf_s("%ud", &lib->book_array[lib->book_num].book_id);
scanf_s("%u", &lib->book_array[lib->book_num].book_id);
printf("請輸入書的價格:\n");
scanf_s("%lf", &lib->book_array[lib->book_num].book_price);
lib->book_num++;
printf("添加成功!\n");
system("pause");
system("cls");
}
//顯示圖書
void show_book(struct library * lib)
{
if (lib->book_num == 0)
{
printf("當前記錄為空。\n");
system("pause");
system("cls");
return;
}
int i = 0;
printf("書名\tID\t售價\n");
for (i = 0; i < lib->book_num; i++)
{
printf("%s\t%u\t%.2lf\n", lib->book_array[i].book_name, lib->book_array[i].book_id, lib->book_array[i].book_price);
}
system("pause");
system("cls");
}
//查找圖書位置
int find_book(struct library * lib)
{
}
//圖書基本資訊管理
void book_management(struct library * lib)
{
int choise;
system("cls");
while (1)
{
printf("***************************\n");
printf("* 圖書基本資訊管理 *\n");
printf("*1.添加圖書 *\n");
printf("*2.洗掉圖書 *\n");
printf("*3.修改圖書 *\n");
printf("*4.查找圖書 *\n");
printf("*5.展示圖書 *\n");
printf("*0.退出功能 *\n");
printf("***************************\n");
scanf_s("%d", &choise);
switch (choise)
{
case 1:
add_book(lib);
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
show_book(lib);
break;
case 0:
return;
default:
printf("輸入錯誤,請重新選擇!\n");
system("pause");
break;
}
system("cls");
}
}
int main()
{
int choise;
struct library lib;
lib.book_num = 0;
system("color f0");
printf("***************************\n");
printf("***************************\n");
printf("* *\n");
printf("*歡迎使用圖書超市管理系統!*\n");
printf("* *\n");
printf("***************************\n");
printf("***************************\n");
system("pause");
system("cls");
while (1)
{
show_menu();
scanf_s("%d",&choise);
switch (choise)
{
case 1:
book_management(&lib);
break;
case 2:
break;
case 3:
break;
case 0:
return 0;
default:
printf("輸入錯誤,請重新選擇!");
system("pause");
break;
}
system("cls");
}
}
供參考~
scanf_s對于%s需要多一個引數
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/56539.html
標籤:C語言
上一篇:同學給我要實驗報告代碼怎么辦?
