gpt4 book ai didi

c - 要求输入数字并存储在数组中但检查它是否已经存在

转载 作者:行者123 更新时间:2023-11-30 17:59:00 24 4
gpt4 key购买 nike

我正在为一个程序编写一个函数,要求用户输入“学生证号”并将其存储在数组中。在存储函数之前,必须检查数组中是否还没有该编号,因为学生编号必须是唯一的。它还包含一个指向 int 的指针,表示到目前为止已存储了多少学生编号。我已经编写了一些代码,但它不起作用:(有人可以透露一些信息吗?这是我的代码:

void update_student_id(int a[], int*pnum)
{
int temp,h;
for (h=0;h<=*pnum;h++){
printf(">>>Student ID:");
scanf("%d",&temp);
if (temp==a[h]){
printf("ERROR:%d has already been used!\n",temp);
h=*pnum+1;
}
else
h=*pnum+1;
}
a[*pnum]=temp;
*pnum++;

好的,新版本有 2 个 for 循环,有所改进,但尚未工作:(

void update_student_id(int a[], int*pnum)
{
int temp,h,i;
for (h=0;h<=*pnum;h++){
printf(">>>Student ID:");
scanf("%d",&temp);

for(i=0;i<=*pnum;i++)
if (temp==a[i]){
printf("ERROR:%d has already been used!\n",temp);
i=*pnum+1;
}
else i++;
}
a[*pnum]=temp;
(*pnum)++;
}

在丹尼斯的帮助下解决了问题,最终代码:

void update_student_id(int a[], int*pnum)
{
int temp,h,i,canary;
for (h = 0; h <= *pnum; h++) {
printf(">>>Student ID:");
scanf("%d", &temp);

canary = 0;
for (i = 0; i < *pnum; i++) {
if (temp == a[i]) {
printf("ERROR:%d has already been used!\n",temp);
canary = 1;
break;
}
}
if (canary == 0) {
a[*pnum] = temp;
(*pnum)++;
break;
}
}

return;}

最佳答案

所以,我看到的主要事情是,在扫描数字后,您实际上并没有检查该数字是否已经在数组中;而是在检查该数字是否已经存在于数组中。您只是检查它是否位于特定索引处。

更具体地说,您在 for 循环中需要的不仅仅是 if 语句;也许是另一个循环,查看到目前为止用完的索引。

编辑:最大的问题是在 else 子句中,不要增加 i。其次,您需要一些金丝雀变量来让您知道是否已对 printf 进行了调用。

例如,这是我对这些循环的想法:

for (h = 0; h < *pum; h++) {
printf(">>>Student ID:");
scanf("%d", &temp);

canary = 0; // assuming you initialize this at beginning of function
for (i = 0; i < *pnum; i++) {
if (temp == a[i]) {
printf("ERROR:%d has already been used!\n",temp);
canary = 1;
break;
}
// DON'T INCREMENT i, LOOP IS ALREADY DOING IT
}

// if canary is still 0, we know we haven't called that printf
// and can add in the element. Only then do we increment the count.
if (canary == 0) {
a[*pnum] = temp;
(*pnum)++;
}
}

关于c - 要求输入数字并存储在数组中但检查它是否已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11851340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com