Я пытаюсь написать программу, в которой пользователь вводит номера массивов и алфавитные символы. Затем программа считывает массив, если он видит номер, программа должна подталкивать это число в один стек. Однако, если он видит алфавитный символ, последний нажатый номер выскочит.Функции push, pop и display из одной строки в стек
До сих пор у меня есть этот код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 20
int top, i;
void push (double stack[], double x, int top)
{
stack[top] = x;
}
int pop (double stack[])
{
double x;
stack [top]=x;
return x;
}
void display (double stack[],int top)
{
int i;
printf ("\n The stack is: ");
for (i=0; i<=top; i++)
{
printf ("%lf\n",stack[i]);
}
}
void main()
{
int r;
int stack[10];
char array[10];
printf("introduce the numbers");
fgets(array,MAX,stdin);
int l;
r=strlen(array);
top=0;
for (l=0;l<=r;l++)
{
int n;
if (isdigit(array[l]))
{
push(stack,array[l],top);
top=top+1;
}
if (islower(array[l]))
{
pop(stack);
printf("you have popped %d", n);
top=top-1;
}
}
display(stack,top);
}
По какой-то причине программа не работает, если я ввожу 22a
выход:
you have popped 4194432 The stack is: 50.00000 50.00000
Я особенно заинтересован в том, как я должен напишите pop, push и display, чтобы эта программа работала. Как мне это сделать?
Спасибо
Я программирования в C
Вы читаете двадцать символов '# определите MAX 20' в массив размера 10. Кроме того, в вашем цикле у вас есть 'for (l = 0; l <= r; l ++)', что может привести к тому, что i n segfault, когда вы попытаетесь получить доступ к 'stack [l]' if 'l == r'. – ForceBru
Более того, вы вызываете 'pop (stack)' и _not с использованием значения return_ (!), Поэтому почему вы думаете, что неинициализированная переменная 'n' будет содержать какое-то полезное значение? – ForceBru
Всякий раз, когда вы зацикливаете, вы выполняете 'for (i = 0; i <= threshold; i ++)', что не имеет смысла: вы пытаетесь получить значения 'treshold + 1' из массива, в то время как вы определенно хотят только «перехватить» их. – ForceBru