我有一个问题,当用户输入相同的ID时,他们需要再次键入name和id。 当用户键入相同的id号时,我怎样才能要求用户输入id而不是name和id.Please给我一些提示如何做到这一点。谢谢你的帮助!
struct student
{
char student_name[30];
char student_id[10];
int student_course_num[20];
int student_course[10];
};
int main()
{
int student_num;
printf("Enter the number of students:");
scanf("%d",&student_num);
fflush(stdin);
struct student S[student_num];
char TestForId[student_num][10];
int i,j,student_code=1;
for(i=0;i<student_num;i++)
{
printf("Enter the name of student:");
fgets(S[i].student_name,30,stdin);
printf("Enter the Student ID (8 digits):");
fgets(S[i].student_id,10,stdin);
strcpy(TestForId[i],S[i].student_id);
for(j=0;j<i;j++)
{
if(strcmp(TestForId[j],S[i].student_id)==0)
{
printf("The student id has already exit\n");
}
}
student_code++;
}
答案 0 :(得分:1)
你的问题是:你有一个结构S,它应该包含所有值。但是在S中你只有一个数组用于名称,而不是所有名称的char数组数组。
也许你想要的是
struct student {
char name[50];
int id;
}
struct student sarray[30];
答案 1 :(得分:1)
试试这个:
for(i=0;i<StuNum;i++)
{
printf("Number of Students %d:\n",student_code);
printf("Enter the name of student:");
scanf("%s",&S.student_name[i]);
fflush(stdin);
printf("Enter the Student ID :");
scanf("%d",&S.student_id[i]);
fflush(stdin);
for(j=0;j<i;j++)
{
if(S.student_id[j]==S.student_id[i]) //whether the id is same or not
{
printf("<ID NUMBER HAS ALREADY EXITED>\nEnter the ID again: ");
scanf("%d",&S.student_id[i]);
break;
}
}
student_code++; }
答案 2 :(得分:1)
创建一个struct student
数组,而不只是一个条目。 struct student S[Student_N];
创建已使用记录的计数。 size_t Student_Count = 0;
在学生姓名之前先询问学生证。
将学生ID(以及后来的学生姓名)读入本地struct student local;
。 scanf("%29s", local.student_id);
使用宽度sizeof(local.student_id) - 1
。
在询问学生姓名之前,请在列表0
中搜索Student_Count
以查找匹配的条目。如果找到,请使用匹配的数据填写本地的其余部分,跳过接下来的两个步骤。
将学生姓名读入本地struct student local;
。 scanf(" %49[^\n]", local.student_name);
。使用格式说明符扫描第一个和第一个之间的空格。姓氏。
将local
复制到student_id[Student_Count++]
。
不确定您是否需要student_num
字段。 S[Student_N]
的索引是student_num
。
检查scanf()
中的结果,如if (scanf("%29s") != 1) Handle_Error();
。
删除fflush(stdin);
答案 3 :(得分:0)
您必须使用strcmp
代替if(S.student_id[j]==S.student_id[i])
。
类似的东西:
if(0 == strcmp(S.student_id[j],S.student_id[i]))
有关strcmp的更多信息:Here
id也不应该是一个int数组而是一个char数组(字符串对吗?)
我真的不喜欢你的int StuNum=S.student_num;
它应该位于主要的顶部。
答案 4 :(得分:0)
我会创建一个struct数组,其中每个元素都是一个包含ID和名称的结构。然后我会保持数组ID的排序,这样就可以很容易地检查ID是否存在。
e.g:
新ID = 10
数组中最大的ID是7(此信息是已知的,因为
数组已排序)因此无需进一步检查,只需添加一个
新ID
为此,您可以使用qsort
和bsearch