void borrow_book() {//借书函数
system("cls");
char student_id[20];
char book_id[20];
int id;
printf("请输入书籍编号和学生学号: \n");
scanf("%d %s", &id, &student_id);
for (int i = 0; i < book_count; i++) {
if (strcmp(book_id,books[i].id)==0&& books[i].available==1) {
books[i].available = 0;
MessageBox(NULL,"借阅成功","温馨提示",MB_OK+MB_ICONQUESTION);
for (int j = 0; j < student_count; j++) {
if (strcmp(students[j].id,student_id)==0) {
for (int k = 0; k < MAX_BOOKS; k++) {
if (students[j].borrowed_books[k] == 0) {
students[j].borrowed_books[k]=id;
break;
}
}
break;
}
}
break;
}
if (strcmp(book_id,books[i].id)!=0|| books[i].available==0)
MessageBox(NULL,"此书已被借阅或书籍编号错误","借阅失败",MB_OK+MB_ICONQUESTION);
}
}
if (strcmp(book_id,books[i].id)==0&& books[i].avalable==1)
这句代码无法运行
你这 book_id 都没赋值,比了个寂寞呀
scanf("%d %s", &id, &student_id);
这一行有问题哦!修改如下所示:
scanf("%d %s", &id, student_id);
因为NULL本质就是0,则,一个指针变量的值为0,意味着它指向整个内存的最开始字节处,而这个地方是用户程序(APP)的禁区,不能访问,如果强行访问,则,将被OS禁止并中断这个进程执行(程序被中断)。
上述说法,不能说指针的值不能为NULL,只是说,不能对0编号开始的空间进行“访问”。即,可以令指针指向0编号区域,只要不访问就没有问题。
【软件工程】建议所有的变量(尤其是局部变量)都应该初始化为0(NULL)。这里,对于指针变量初始化为NULL的目的在于:区分垃圾数据!
int *p;
int x;
…
if(x > 0)
p = (int *)malloc(…);
x = …;
…
// 在此处,无法识别p是否已经指向一段申请了的空间!
if(p是否指向了有效空间)
此时无法判断p是否指向了有效空间,为此,需要进行如下调整:
int *p = NULL;
int x;
…
if(x > 0)
p = (int *)malloc(…);
x = …;
…
if(p == NULL)
// p没有指向有效空间
else
// p指向了有效空间