帮忙看下,把数据输入链表的时候如何检测和链表中的数据是否有重复 50
#include<stdlib.h>#include<stdio.h>#include<string.h>typedefstructLNode{intstuid;char...
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct LNode
{
int stuid;
char name[20];
float english;
float math;
float database;
float sum;
float average;
struct LNode *next;
}LNode,*LinkList;
LinkList Input()
{
int i,n;
int num;
LinkList p,L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
printf("请输入要输入的学生个数:\n");
scanf("%2d",&n);
for(i=1;i<=n;i++)
{
printf("\n");
printf("** 请输入第%d个学生的信息 **\n",i);
printf("\n");
p=(LinkList)malloc(sizeof(LNode));
printf("请输入学生的学号:");
while(1)
{
scanf("%d",&num);
if(num<1000000000||num>9999999999)
{
printf("输入的学号有误,请重新输入");
continue;
}
else
break;
}
while(1)
{
}
/*
while(NULL!=p)
{
printf("stud=%d",p->stuid);
printf("num=%d",num);
if(p->stuid==num)
{
printf("已存在的学号,请重新输入");
scanf("%d",&num);
p=p->next;
continue;
}
else
p->stuid=num;
break;
}
*/
printf("请输入学生的姓名:");
scanf("%s",p->name);
printf("请输入学生的英语成绩:");
while(1){
scanf("%f",&p->english);
if(p->english<0||p->english>100)
{
printf("输入的成绩错误,请重新输入");
continue;
}
else
break;
}
printf("请输入学生的高数成绩:");
while(1){
scanf("%f",&p->math);
if(p->math<0||p->math>100)
{
printf("输入的成绩错误,请重新输入");
continue;
}
else
break;
}
printf("请输入学生的数据结构成绩:");
while(1){
scanf("%f",&p->database);
if(p->database<0||p->database>100)
{
printf("输入的成绩错误,请重新输入");
continue;
}
else
break;
}
p->sum=p->english+p->math+p->database;
p->average=p->sum/3;
p->next=L->next;
L->next=p;
}
return L;
}
如上两个函数,第一个是链表的结构体,第二个是把数据输入到链表中,我的问题是在输入学号的时候,如何判定输入的学号是否与原来链表中有的学号相同,有则无法输入,改了好久都不行 展开
#include <stdio.h>
#include <string.h>
typedef struct LNode
{
int stuid;
char name[20];
float english;
float math;
float database;
float sum;
float average;
struct LNode *next;
}LNode,*LinkList;
LinkList Input()
{
int i,n;
int num;
LinkList p,L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
printf("请输入要输入的学生个数:\n");
scanf("%2d",&n);
for(i=1;i<=n;i++)
{
printf("\n");
printf("** 请输入第%d个学生的信息 **\n",i);
printf("\n");
p=(LinkList)malloc(sizeof(LNode));
printf("请输入学生的学号:");
while(1)
{
scanf("%d",&num);
if(num<1000000000||num>9999999999)
{
printf("输入的学号有误,请重新输入");
continue;
}
else
break;
}
while(1)
{
}
/*
while(NULL!=p)
{
printf("stud=%d",p->stuid);
printf("num=%d",num);
if(p->stuid==num)
{
printf("已存在的学号,请重新输入");
scanf("%d",&num);
p=p->next;
continue;
}
else
p->stuid=num;
break;
}
*/
printf("请输入学生的姓名:");
scanf("%s",p->name);
printf("请输入学生的英语成绩:");
while(1){
scanf("%f",&p->english);
if(p->english<0||p->english>100)
{
printf("输入的成绩错误,请重新输入");
continue;
}
else
break;
}
printf("请输入学生的高数成绩:");
while(1){
scanf("%f",&p->math);
if(p->math<0||p->math>100)
{
printf("输入的成绩错误,请重新输入");
continue;
}
else
break;
}
printf("请输入学生的数据结构成绩:");
while(1){
scanf("%f",&p->database);
if(p->database<0||p->database>100)
{
printf("输入的成绩错误,请重新输入");
continue;
}
else
break;
}
p->sum=p->english+p->math+p->database;
p->average=p->sum/3;
p->next=L->next;
L->next=p;
}
return L;
}
如上两个函数,第一个是链表的结构体,第二个是把数据输入到链表中,我的问题是在输入学号的时候,如何判定输入的学号是否与原来链表中有的学号相同,有则无法输入,改了好久都不行 展开
1个回答
展开全部
while(1)
{
scanf("%d",&num);
if(num<1000000000||num>9999999999)
{
printf("输入的学号有误,请重新输入");
continue;
}
else
if(isExist(L,num)==1) //增加一个函数,判断是否存在
continue;
else
break;
}
//函数
int isExist(LinkList h,int n)
{
int flag=0;
LinkList p;
p=h;
while(p!=null && p->stuid!=n)
p=p->next;
if(p->next==n)
flag=1;
return flag;
}
更多追问追答
追问
编译提示这个 'struct LNode *' differs in levels of indirection from 'int '
在if(p->next==n) 这一行
追答
应该是p->stuid
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询