【发布时间】:2023-02-08 02:46:10
【问题描述】:
上下文:我需要编写一个程序来接受将存储到数组中的输入。在存入数组之前,必须检查输入的数字是否已经存在于数组中。如果不存在,则将其存储到数组中。如果存在,将询问另一个输入。
现在,我的代码将从用户那里获取输入,但该代码仅适用于第一个输入。在最后一次输入之前,它不会第二次工作。任何指针?
这是我的代码:
#include<stdio.h>
#define size 5
main()
{
int i;
arr[size];
input;
printf("This program will accept ");
printf("unique inputted numbers that will be stored");
printf(" in an array\n");
for(i = 0;i < size;i++)
{
printf("Enter input: ");
scanf("%d",&input);
if (unique(arr,input,i))
arr[i] = input;
else
i--;
//decrement i because ask for input again
}
for(i = 0;i < size;i++)
printf("%d ",arr[i]);
}
int unique(int arr[],int input,int i)
{
int n, z;
n = 0;
z = 1;
while(i > n)
{
if(arr[n] == input)
{
scanf("%d",&n);
z = 0;
break;
}
else
n=1;
break;
}
return z;
}
【问题讨论】:
-
在
unique函数中执行scanf是非常糟糕的设计。unique唯一应该做的就是返回 0input已经在数组中。 -
另外声明为
arr[size];和input;已经过时了一段时间(不确定,可能是 20 年左右)。使用int arr[size];和int input;。 -
所以...
uniquefori==1将返回 1,到目前为止一切顺利。对于更高的i,它会将输入与arr[0]进行比较,并告诉您它们是否不相等。如果它们相等,它将读取并丢弃一个数字。你确定你的功能完全正确吗? -
您应该打开编译器警告并阅读它们。对于 GCC 或 clang,请使用
-Wall -Wextra -pedantic。您应该为main和您的变量提供正确的类型。在调用该函数之前,您应该为unique提供原型。 -
用数字填充另一个数组并保持排序 (qsort)。当有新条目时,搜索 (bsearch) 数组以查看它是否已存在。如果是这样,相应地打印一条错误消息。否则,在数组中填充另一个条目。并转到步骤 2。
标签: c