【发布时间】:2018-12-11 21:06:06
【问题描述】:
我正在尝试编写代码以将患者添加到列表中。这是一个很大的代码,但我在输入患者姓名的特定部分遇到问题。我可以正确输入名称,但是当我尝试将代码放入开关/机箱时,它停止正常工作。我想知道这里是否有人可以提供帮助。
最初我认为可能是 malloc 导致了问题,但如果没有 switch/case,它似乎可以正常工作。
代码:
#include <stdio.h>
#include <stdlib.h>
typedef unsigned long int u32;
typedef unsigned char u8;
typedef struct Patient patient;
struct Patient
{
u8* name;
patient* next;
};
void addfirstpatient(u8* name);
void addpatient(u8* name);
void print (void);
patient* head;
u8 length = 0;
int main()
{
u32 x = 1;
switch(x)
{
u8* name = malloc(20*sizeof(u8));
case 1:
printf("\nPlease enter patient name:");
scanf("%s",name);
if(length == 0)
{
addfirstpatient(name);
}
else
{
addpatient(name);
}
print();
printf("\nPatient added , Thank you\n");
printf("\nTo add another patient press 1");
scanf("%d",&x);
break;
case 2:
break;
default:
printf("\nentered default");
}
return 0;
}
void addfirstpatient(u8* name)
{
printf("\nadding first patient: ");
head = (patient*)malloc(sizeof(patient));
head->next = NULL;
head->name = name;
length++;
}
void addpatient(u8* name)
{
patient* ptr = head;
while((ptr->next)!=NULL)
{
ptr = ptr->next;
}
printf("\nadding patient");
ptr->next = (patient*)malloc(sizeof(patient));
(ptr->next)->next = NULL;
(ptr->next)->name = name;
length++;
}
void print (void)
{
patient *ptr = head;
u32 count = 1;
printf("\n---------------------");
if (ptr == NULL)
{
printf ("\nList is empty");
}
while (ptr!=NULL)
{
printf("\npatient Number %d\nname:%s" ,count,ptr->name);
ptr = ptr->next;
count++;
}
printf("\n---------------------");
printf("\n");
}
【问题讨论】:
-
打开编译器警告并将其视为错误。应该告诉您,没有 case 标签的
malloc行将永远不会执行。 -
什么意思,它停止工作了?您是否收到编译器错误?运行时错误?崩溃?请将任何此类消息剪切并粘贴到问题中
-
请注意,
scanf("%s",name);是一个等待吞噬第一个输入超过 19 个字符的人的黑洞。scanf("%19s",name);会更安全。
标签: c string switch-statement malloc