C 防止数组接受重复值
我有一个堆栈,我想在其中推送不同的元素。我编写了以下代码。但它总是只检查第一个元素。如果我在第一个值中输入一个重复的值,它将不接受该值,但如果我在第二个或第三个值中输入一个重复的值,它将接受该值。 例如,如果我输入20,然后再次输入20,它将不接受第二个, 但如果我输入20,22,22,它会接受副本。我怎样才能防止这种情况C 防止数组接受重复值,c,C,我有一个堆栈,我想在其中推送不同的元素。我编写了以下代码。但它总是只检查第一个元素。如果我在第一个值中输入一个重复的值,它将不接受该值,但如果我在第二个或第三个值中输入一个重复的值,它将接受该值。 例如,如果我输入20,然后再次输入20,它将不接受第二个, 但如果我输入20,22,22,它会接受副本。我怎样才能防止这种情况 #include <stdio.h> #define MAXSIZE 5 struct stack { int stk[MAXSIZE]; in
#include <stdio.h>
#define MAXSIZE 5
struct stack
{
int stk[MAXSIZE];
int top;
};
typedef struct stack STACK;
STACK s;
void push(void);
int pop(void);
void display(void);
void main ()
{
int choice;
int option = 1;
s.top = -1;
printf ("STACK OPERATION\n");
while (option)
{
printf ("------------------------------------------\n");
printf (" 1 --> Bus Status \n");
printf (" 2 --> Enter Bus \n");
printf (" 3 --> Exit Bus \n");
printf (" 4 --> EXIT \n");
printf ("------------------------------------------\n");
printf ("Enter your choice\n");
scanf ("%d", &choice);
switch (choice)
{
case 1:
display();
break;
case 2:
push();
break;
case 3:
pop();
break;
case 4:
return;
}
fflush (stdin);
printf ("Do you want to continue(Type 0 or 1)?\n");
scanf ("%d", &option);
}
}
/* Function to add an element to the stack */
void push ()
{
int num,i,j,status=0;
if (s.top == (MAXSIZE - 1))
{
printf ("Terminal is Full\n");
return;
}
else
{
printf ("Enter the Bus Number\n");
scanf ("%d", &num);
if(num<1 || num>30) {
printf("This bus Does not Exist.\n");
}
for(i=0;i<5;i++){
if(s.stk[i]==num){
printf("Bus Already in the Terminal\n");
break;
}
else {
s.top = s.top + 1;
s.stk[s.top] = num;
status=1;
break;
}
}
if(status==1)
printf("Bus %d Successfully Entered\n", num);
}
return;
}
#包括
#定义最大尺寸5
结构堆栈
{
int stk[MAXSIZE];
int top;
};
typedef结构堆栈;
堆栈s;
无效推送(void);
int pop(无效);
作废显示(作废);
空干管()
{
智力选择;
int选项=1;
s、 top=-1;
printf(“堆栈操作\n”);
while(选项)
{
printf(“------------------------------------------------\n”);
printf(“1-->总线状态\n”);
printf(“2-->输入总线\n”);
printf(“3-->退出总线\n”);
printf(“4-->退出\n”);
printf(“------------------------------------------------\n”);
printf(“输入您的选择\n”);
scanf(“%d”,选择(&C);
开关(选择)
{
案例1:
显示();
打破
案例2:
推();
打破
案例3:
pop();
打破
案例4:
返回;
}
fflush(stdin);
printf(“是否要继续(键入0或1)?\n”);
scanf(“%d”,选项(&O);
}
}
/*函数将元素添加到堆栈中*/
无效推送()
{
int num,i,j,status=0;
如果(s.top==(MAXSIZE-1))
{
printf(“终端已满\n”);
返回;
}
其他的
{
printf(“输入总线号\n”);
scanf(“%d”和&num);
如果(num30){
printf(“此总线不存在。\n”);
}
对于(i=0;iYou's bus insert loop正在循环并在第一次找到s.stk[i]!=num时添加一条总线。您需要检查总线是否在站点中,即在插入新总线之前搜索整个堆栈
for(i=0;i<5;i++) {
if(s.stk[i]==num){
printf("Bus Already in the Terminal\n");
break;
}
else {
s.top = s.top + 1;
s.stk[s.top] = num;
status=1;
break;
}
}
for(i=0;i您的总线插入循环正在循环,并在第一次找到s.stk[i]!=num时添加总线。您需要检查总线是否在站点中,即在插入新总线之前搜索整个堆栈
for(i=0;i<5;i++) {
if(s.stk[i]==num){
printf("Bus Already in the Terminal\n");
break;
}
else {
s.top = s.top + 1;
s.stk[s.top] = num;
status=1;
break;
}
}
for(i=0;i)您应该学会使用调试器并逐行检查代码。然后您可以查看程序的状态并观察正在发生的事情。完全同意@crashmstr。但是,我将给您一个提示:您必须在按下总线-->或“else”之前检查整个stk语句的位置不正确您已经定义了一个常量,这是一个很好的做法。使用它将是一个更好的做法:for(i=0;除非您在Windows上工作,否则可能不合适。类似地,对于,您是否知道有效的输入范围?如果范围较小,您可以使用数组并将相应的元素设置为1(如果它们的索引已添加到列表中),如果没有,则设置为0。您应该学习使用调试器并逐步完成代码行通过行。然后您可以查看程序的状态并观察正在发生的情况。完全同意@crashmstr。但是,我将给您一个提示:您必须在按下总线-->或“else”之前检查整个stk语句的位置不正确您已经定义了一个常量,这是一个很好的做法。使用它将是一个更好的做法:for(i=0;i除非您在Windows上工作,否则可能不合适。类似地,您是否知道有效的输入范围?如果范围较小,您可以使用数组并将相应的元素设置为1(如果它们的索引已添加到列表中),如果没有,则设置为0。谢谢,您的回答是正确的,我需要搜索整个堆栈。谢谢,你是对的,我需要搜索整个堆栈。