Я пытаюсь сделать обратный польский принтер на веб-сайт онлайнового кодирования, который может выполнять следующие работы-Почему я получаю ошибку SIGSEGV для этой программы?
Входы:
(а + (Ь * с))
((а + Ь) * (г + х))
((а + Т) * ((Ь + (а + с))^(C + d))) Выходы:
аЬс +
аб + гх + *
при + BAC++ кд +^*
Это мой код:
#include <stdio.h>
#include <string.h>
char pop(int t);
void push(int c, int t);
char a[100][400];
int main()
{
int z;
scanf("%d", &z);
int i = 0;
int q = z;
while (q-- > 0)
{
scanf("%s",&a[i][0]);
int t;
for (t = 0; t < strlen(a[i]); t++) //loop to put the values and signs in the 2 stacks
{
if ((a[i][t] == '*') || (a[i][t] == '+') || (a[i][t] == '-') || (a[i][t] == '^'))
{
push(a[i][t], 2);
}
else if (a[i][t] == ')')
{
int y = pop(2);
push(y, 1);
}
else
{
push(a[i][t], 1);
}
}
int k = 0;
char c;
while ((c = pop(1)) !='\0') //loop to put elements in the array v
{
if (c != '(')
{
a[i][k++] = c;
}
}
a[i][k--] = '\0';
int m;
for (m=0; m != k; m++, k--)
{
char t = a[i][m];
a[i][m] = a[i][k];
a[i][k] = t;
}
}
int p;
for (p = 0; p <z ; p++)
printf("%s\n",a[i]);
return 0;
}
char ac[400];
char as[400];
int ic = 0;
int is = 0;
void push(int c,int t)
{
if (t == 1 && ic != 400)
ac[ic++] = c;
else if (t == 2 && is != 400)
as[is++] = c;
}
char pop(int t)
{
if (t == 1 && ic != 0)
return ac[--ic];
if (t == 2 && is != 0)
return as[--is];
return '\0';
}
На компиляции этого кода я получаю SIGSEGV error.I не знаю, Что ошибка в этом коде. Пожалуйста, помогите
Используйте отладчик. –
Компиляция результатов в segfault, а не результат? – Deduplicator
Если вы получите это при компиляции, то что-то не так с вашим компилятором (что звучит маловероятно). –