为什么呀,御坂排查了,就是这一部分,但是不知道哪里错了?看了好多好多遍
#include <stdio.h>#include <stdlib.h>
struct Date{
int year;
int month;
int day;
_Bool yes;
};
struct vaccines{
int age;
char name;
struct Date date_1;
struct Date date_2;
struct vaccines *next;
};
void getInput(struct vaccines *va);//录入数据
void addvaccines(struct vaccines **library);
void printLibrary(struct vaccines *library);//打印整个单链表
void releaseLibrary(struct vaccines *library);//释放内存
void getInput(struct vaccines *va){
_Bool i, j = 0;
printf("请输入姓名:");
scanf("%s", va->name);
printf("请输入年龄:");
scanf("%d", &va->age);
printf("是否接种疫苗?(1/0):");
scanf("%d", &i);
va->date_1.yes = i;
if (i){
printf("请输入日期(2004-4-2):");
scanf("%d-%d-%d", &va->date_1.year, &va->date_1.month, &va->date_1.day);
printf("是否接种第2针疫苗?(1/0):");
scanf("%d", &j);
va->date_2.yes = j;
}
else{
printf("请尽快接种疫苗!\n");
}
if (j){
printf("请输入日期(2004-4-2):");
scanf("%d-%d-%d", &va->date_2.year, &va->date_2.month, &va->date_2.day);
}
else if (i){
printf("请尽快接种第二针疫苗!\n");
}
}
void addvaccines(struct vaccines **library){
struct vaccines *va;//下一个链的地址
struct vaccines *temp;
va = (struct vaccines *)malloc(sizeof(struct vaccines));//申请下一个链的内存
if (va == NULL){
printf("内存分配失败了。");
exit(1);
}
getInput(va);
printf("=======\n");
if (*library != NULL){
printf("-------\n");
temp = *library;
*library = va;
va->next = temp;
}
else{
printf("+++++++");
*library = va;
va->next = NULL;
}
printf("=======\n");
}
void printLibrary(struct vaccines *library){
struct vaccines *va;
int count = 1;
va = library;
while (va != NULL){
printf("va%d\n:", count);
printf("姓名:%s,年龄:%d\n", va->name, va->age);
if (va->date_1.yes){
printf("第1 针疫苗接种日期:%d-%d-%d\n", va->date_1.year, va->date_1.month, va->date_1.day);
}
else{
printf("未接种疫苗!\n\n");
}
if (va->date_2.yes){
printf("第2 针疫苗接种日期:%d-%d-%d\n\n", va->date_2.year, va->date_2.month, va->date_2.day);
}
else if(va->date_1.yes){
printf("未接种第二针疫苗!\n\n");
}
va = va->next;
count++;
}
}
void releaseLibrary(struct vaccines *library){
struct vaccines *temp;
while (library != NULL){
temp = library;
library = library->next;
free(temp);
}
}
int main(){
struct vaccines *library = NULL;
char ch;
while (1){
printf("请问是否需要录入信息(Y/N):");
do{
ch = getchar();
}while (ch != 'Y' && ch != 'N');
if (ch == 'Y'){
addvaccines(&library);
printf("--------\n");
}
else{
break;
}
}
printf("请问是否需要输出信息(Y/N):");
do{
ch = getchar();
}while (ch != 'Y' && ch != 'N');
if (ch == 'Y'){
printLibrary(library);
}
releaseLibrary(library);
return 0;
} 本帖最后由 jhq999 于 2022-12-6 13:19 编辑
以后提问时把错在哪指出来,或者注释你的代码功能,你自己写的代码别人怎么知道你想实现什么?
void getInput(struct vaccines *va)
{
int i, j = 0;///////////////////////_Bool是一个字节
printf("请输入姓名:");
scanf("%s", va->name);
printf("请输入年龄:");
scanf("%d", &va->age);
printf("是否接种疫苗?(1/0):");
scanf("%d", &i);
va->date_1.yes = i;
if (i)
{
printf("请输入日期(2004-4-2):");
scanf("%d-%d-%d", &va->date_1.year, &va->date_1.month, &va->date_1.day);
printf("是否接种第2针疫苗?(1/0):");
scanf("%d", &j);/////////////////////////////////////这里把i覆盖成0
va->date_2.yes = j;
}
else
{
printf("请尽快接种疫苗!\n");
}
if (j)
{
printf("请输入日期(2004-4-2):");
scanf("%d-%d-%d", &va->date_2.year, &va->date_2.month, &va->date_2.day);
}
else if (i)
{
printf("请尽快接种第二针疫苗!\n");
}
}
void printLibrary(struct vaccines *library)
{
struct vaccines *va;
int count = 1;
va = library;
while (va != NULL)
{
printf("va%d\n:", count);
printf("姓名:%s,年龄:%d\n", va->name, va->age);
if (va->date_1.yes)
{
printf("第1 针疫苗接种日期:%d-%d-%d\n", va->date_1.year, va->date_1.month, va->date_1.day);
if (va->date_2.yes)////////////////////////////////////////////////
{
printf("第2 针疫苗接种日期:%d-%d-%d\n\n", va->date_2.year, va->date_2.month, va->date_2.day);
}
else if(va->date_1.yes)
{
printf("未接种第二针疫苗!\n\n");
}
}
else
{
printf("未接种疫苗!\n\n");
}
va = va->next;
count++;
}
} 图片错了 jhq999 发表于 2022-12-6 13:13
以后提问时把错在哪指出来,或者注释你的代码功能,你自己写的代码别人怎么知道你想实现什么?
图片里不是有表示吗?2排空格中间,不知道为什么,段错误了。 jhq999 发表于 2022-12-6 12:08
以后提问时把错在哪指出来,或者注释你的代码功能,你自己写的代码别人怎么知道你想实现什么?
谢谢,刚刚把_Bool改为char就没问题了。为什么不可以使用_Bool啊? 本帖最后由 jhq999 于 2022-12-6 15:29 编辑
御坂19090 发表于 2022-12-6 14:27
谢谢,刚刚把_Bool改为char就没问题了。为什么不可以使用_Bool啊?
scanf("%d"....//是输入4个字节,_Bool只有一个字节,在声明i,j时,它们挨在一起,本来i=1,在输入j时,把j后面的三个字节赋值成0,i就在后面3个字节之中。
还有我是在j输入0时发现不输出“请尽快接种第二针疫苗”才发现你声明成_Bool的错误
还有建议你改成int如果你输入的格式是“%d"的话
页:
[1]