如何解决如何在C中调用单向链表中的字符串
这是我的结构
struct Student
{
int numberofstudents;
float mid,prj,final,hmw;
int lettergrade;
int studentnumber;
char name[40];
char lastname[40];
int birthyear;
float totalgrade;
struct Student *next;
}* head;
void searchbylastname(char *lastname)
{
struct Student * temp = head;
while(temp!=NULL)
{
if(temp->lastname == lastname){
printf("Student Number: %d\n",temp->studentnumber);
printf("Name: %s\n",temp->name);
printf("Surname: %s\n",temp->lastname);
printf("Birth Year: %d\n",temp->birthyear);
printf("Total Grade: %0.2f\n",temp->totalgrade);
return;
}
temp = temp->next;
}
printf("Student with student number %s is not found !!!\n",lastname);
}
我用 switch case 在 main 中调用它
head = NULL;
int choice;
char name[50];
char lastname[50];
int birthyear;
int studentnumber;
float totalgrade;
float prj,hmw,mid,final;
case 6:
printf("Enter student lastname to search: ");
scanf("%s",&lastname);
searchbylastname(lastname);
break;
printf("Student with student number %s is not found !!!\n",lastname);
我不知道该怎么办,如果有人有意见,我将不胜感激。
解决方法
==
不比较 C 中的字符串,只比较这些字符串的引用(地址)。如果它们不引用同一个对象,它们总是不同的。
要比较字符串,您需要使用 strcmp
函数。
https://www.man7.org/linux/man-pages/man3/strncmp.3.html
您的代码有更多问题。即使您使用 strcmp
,它也会显示尚未找到学生的消息。如果您可能有更多的学生具有相同的姓氏(这更希望您需要添加一个标志)
void searchbylastname(char *lastname)
{
struct Student * temp = head;
int studentsFound = 0;
while(temp!=NULL)
{
if(!strcmp(temp->lastname,lastname)){
stutentsFound = 1;
printf("Student Number: %d\n",temp->studentnumber);
printf("Name: %s\n",temp->name);
printf("Surname: %s\n",temp->lastname);
printf("Birth Year: %d\n",temp->birthyear);
printf("Total Grade: %0.2f\n",temp->totalgrade);
}
temp = temp->next;
}
if(!studentsFound)
printf("Students having %s surname have not been found !!!\n",lastname);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。