循环哪点出问题了?一直重复让输入第一个学生学号。
#include
int n=0;
struct student{
char num[20]; //学号
char name[20]; //姓名
char class[20]; //班级
int scores[3]; //该生在三门课程中所获得的积分
int levels[3]; //三门课程的等级,与scores一一对应
};
struct student stu[100];
int main()
{
void add_information();
add_information();
return 0;
}
void add_information()//新增信息
{
int judge,m=0,j,i;//judge判断输入信息是否重复,n是已经存在的学生数量
printf("请输入待添加学生信息人数:\n");
scanf("%d",&m);
if(m>0)
{
for(i=n;iprintf("请输入第%d位学生学号:\n",i+1);
scanf("%s",&stu[i].num);
for(judge=1;judge=1;)
{
judge=0;
printf("请输入第%d位学生学号:\n",i+1);
scanf("%s",&stu[i].num);
for(j=0;jif(stu[i].num==stu[j].num)
{
printf("该学生已存在!请重新输入");
judge=1;
break;
}
else
judge=0;
}//判断输入是否重复
}
printf("请输入姓名:");
scanf(" %c",&stu[i].name);
printf("请输入班级:");
scanf(" %c",&stu[i].class);
stu[i].scores[3]=stu[i].levels[3]=0;
printf("新增学生信息成功!");
}
}
else
printf("输入错误,请重新输入!");
}
应该是因为判断学生学号是否重复的那个for循环,judge=1 错了,改为judge==1, 然后其他地方修改下即可,修改如下:
#include<stdio.h>
#include <string.h>
int n=0;
struct student{
char num[20]; //学号
char name[20]; //姓名
char cls[20]; //班级
int scores[3]; //该生在三门课程中所获得的积分
int levels[3]; //三门课程的等级,与scores一一对应
};
struct student stu[100];
int main()
{
void add_information();
add_information();
// printf("输入的学生信息如下:\n");
// for(int i=0;i<3;i++){
// printf("%s,%s,%s\n",stu[i].num,stu[i].name,stu[i].cls);
// }
//
return 0;
}
void add_information()//新增信息
{
int judge,m=0,j,i;//judge判断输入信息是否重复,n是已经存在的学生数量
printf("请输入待添加学生信息人数:\n");
scanf("%d",&m);
if(m>0)
{
for(i=n;i<m+n;i++)
{
printf("请输入第%d位学生学号:",i+1);
scanf("%s",&stu[i].num);
for(judge=1;judge==1;)
{
judge=0;
for(j=0;j<i;j++)
{
if(strcmp(stu[i].num,stu[j].num)==0) // 因为学号是字符串,所以比较学号是否相等要用比较字符串是否相等的方式
{
printf("该学生已存在!请重新输入\n");
judge=1;
break;
}
else
judge=0;
}//判断输入是否重复
if(judge==1){
printf("请输入第%d位学生学号:",i+1);
scanf("%s",&stu[i].num);
}
}
printf("请输入姓名:");
scanf("%s",stu[i].name);
printf("请输入班级:");
scanf("%s",stu[i].cls);
for(int k=0;k<3;k++){
stu[i].scores[i]=0;
stu[i].levels[i]=0;
}
printf("新增学生信息成功!\n");
}
}
else
printf("输入错误,请重新输入!");
}
judge是循环变量,但循环里你强制judge=0,那不就一直输第1个了么