0
我有一個堆棧,我想要推送不同的元素。我寫了下面的代碼。但它總是隻檢查第一個元素。如果我輸入重複值第一個值,它不接受,但如果我輸入第二個或第三個值的重複值,它會接受它。 例如,如果我輸入20並再次輸入20,它將不會接受第二個,即 ,但如果我輸入20,22,22,它將接受重複。我怎樣才能防止這一點?防止數組接受重複值
#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;
}
你應該學會使用一個調試器並逐行執行代碼。然後,您可以查看程序的狀態並觀察發生的情況。 – crashmstr
完全同意@crashmstr。但是,我會給你一個提示:你必須在推巴士前檢查整個stk - >「else」語句不在正確的位置 – vad
你已經定義了一個常量,這是一個很好的習慣。使用它將是一個更好的做法:'for(i = 0; i <5; i ++)' – MikeC