Jestem początkującym programistą, napisałem program realizujący operacje na stosie. Program pobiera dane oddzielone spacjami. Proszę o podpowiedź czy dany program można byłoby napisać lepiej oraz wytknąć ewentualne niedociągnięcia.
#include <stdio.h>
#include <string.h>
#define ILE 100
int stos[ILE];
int ile=0;
void push (int elem);
int pop (void);
void wypisz(void);
int main()
{
char tab[ILE];
char znak;
int i, wart=0;
puts("Podaj dzialanie w ONP");
fgets(tab,ILE-1,stdin);
for(i=0; i<strlen(tab)-1; i++)
{
switch(tab[i])
{
case'0':case'1':case'2':case'3':case'4':
case'5':case'6':case'7':case'8':case'9':
wart=wart*10+tab[i]-'0';
if(tab[i+1]==' ')
{
push(wart);
wart=0;
}
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
znak=pop();
push(pop()-znak);
break;
case '/':
znak=pop();
if(znak!=0)
push(pop()/znak);
else
printf("Blad, dzielenie przez 0\n");
break;
case ' ':
break;
default:
printf("Blad, nie znam komendy\n");
break;
}
wypisz();
}
return 0;
}
void push(int elem)
{
if (ile<ILE)
stos[ile++]=elem;
else printf("Blad, stos pelny\n");
}
int pop(void)
{
if(ile>0)
return stos[--ile];
else
printf("Blad, stos pusty\n");
return 0;
}
void wypisz(void)
{
int i;
for(i=0;i<ile; i++)
printf("%d|",stos[i]);
printf("\n");
}