#arrays #c #stack #counting
#массивы #c #стек #подсчет
Вопрос:
Я попытался использовать цикл for, чтобы получить общее число. Он работает вполне нормально, но это только в первом выводе. Из моего приведенного ниже кода, если опция 4 является вашей инструкцией, вы получите правильный ответ в первом выводе, но при повторном нажатии на опцию 4 она продолжает увеличиваться. Мой актуальный вопрос заключается в том, как сохранить первый вывод из цикла.
#include<stdio.h>
int top=-1,m=0;
int A[200],k,n,a,i;
void push(){
if(top>=n-1)
{
printf("ntSTACK is FULL!!n");
}
else
{
printf("Enter the value to be pushed:");
scanf("%d",amp;a);
top ;
A[top]=a;
}
}
void pop(){
if(top<=-1)
{
printf("nt Stack is EMPTY!!n");
}
else
{
printf("nt The popped elements is %dn",A[top]);
top--;
}
}
int main()
{
printf("***********n");
printf("Set the size of your stack(max 200).n");
scanf("%d",amp;n);
printf("You've set the size of the Stack to %dn", n);
printf("nt ........................n");
printf("nt 1- Push into the stack.n");
printf("nt 2- Pop the stack.n");
printf("nt 3- Display the elements in the stack.n");
printf("nt 4- Get the number of elements in the stack.n");
printf("nt 5- EXIT.n");
printf("nt ........................n");
printf("n");
do{
printf("Enter your instruction: ");
scanf("%d",amp;k);
switch(k){
case 1:
push();
printf("n");
break;
case 2:
pop();
printf("n");
break;
case 3:
if(top>=0){
printf("nt Your Stack n");
for(i=top;i>=0;i--){
printf("nt %dn",A[i]);
}
printf("n");
}
else{
printf("Stack is EMPTY!!");
}
break;
case 4:
for(i=0;i<=top;i ){
if(A[i] != top)
m ;
}
printf("%d",m);
printf("n");
break;
case 5:
printf("nt EXITTED...");
break;
default:
printf("nt Not in the above instruction.nn");
}
}
while(k!=5);
return 0;
}
Комментарии:
1.
"Set the size of your stack(max 200).n"
почему вы не проверяете пользовательский ввод?2.
m ;
Просто инициализируйтеm
0
каждый раз передfor
циклом.3. Чтобы подсчитать количество элементов в стеке в данный момент времени, разве вы не можете просто отобразить
top 1
Ответ №1:
Чтобы отобразить количество элементов в данный момент времени, просто отобразите значение top 1
.
#include<stdio.h>
int top=-1;
int A[200],k,n,a,i;
void push(){
if(top>=n-1)
{
printf("ntSTACK is FULL!!n");
}
else
{
printf("Enter the value to be pushed:");
scanf("%d",amp;a);
top ;
A[top]=a;
}
}
void pop(){
if(top<=-1)
{
printf("nt Stack is EMPTY!!n");
}
else
{
printf("nt The popped elements is %dn",A[top]);
top--;
}
}
int main()
{
printf("***********n");
printf("Set the size of your stack(max 200).n");
scanf("%d",amp;n);
printf("You've set the size of the Stack to %dn", n);
printf("nt ........................n");
printf("nt 1- Push into the stack.n");
printf("nt 2- Pop the stack.n");
printf("nt 3- Display the elements in the stack.n");
printf("nt 4- Get the number of elements in the stack.n");
printf("nt 5- EXIT.n");
printf("nt ........................n");
printf("n");
do{
printf("Enter your instruction: ");
scanf("%d",amp;k);
switch(k){
case 1:
push();
printf("n");
break;
case 2:
pop();
printf("n");
break;
case 3:
if(top>=0){
printf("nt Your Stack n");
for(i=top;i>=0;i--){
printf("nt %dn",A[i]);
}
printf("n");
}
else{
printf("Stack is EMPTY!!");
}
break;
case 4:
printf("%d",(top 1));
printf("n");
break;
case 5:
printf("nt EXITTED...");
break;
default:
printf("nt Not in the above instruction.nn");
}
}
while(k!=5);
return 0;
}
Чтобы исправить ваш код:
for(i=0,m=0;i<=top;i )
{
if(A[i] != top)
m ;
}