Я действительно не понял ваш код.
Если ожидается, что пользователь будет вводить один символ каждый раз, я имею в виду один символ + ввод, вам следует использовать простой символ вместо символа []. И если вы притворяетесь, что используете строку, вы должны ее получить и разобрать, сказал Пцико.
Вы могли бы сделать что-то подобное. Проблема заключалась бы в обработке чисел с несколькими цифрами, но, подумав немного, вы можете решить эту проблему. Я написал попытку, но я уверен, что это не сработает.
printf ("\ nRPN Calculator \ n");
printf ("Введите 'i' для целочисленного режима \ n");
printf ("Введите 'f' для режима с плавающей запятой \ n");
printf ("Введите 'q', чтобы выйти \ n");
scanf ("% c", s);
переключатель (* s) {
case 'i':
printf("(Integer Mode)\n");
break;
case 'f':
printf("(Floating Point Mode)\n");
break;
case 'q':
printf("Bye Bye\n");
return;
break;
}
printf («Введите выражение по одному символу каждый раз \ n»);
до {
scanf("%c", s);
switch(s) {
case '+':
a = pop();
b = pop();
printf("%d\n", a+b);
push(a+b);
break;
case '-':
a = pop();
b = pop();
printf("%d\n", b-a);
push(b-a);
break;
case '*':
a = pop();
b = pop();
printf("%d\n", a*b);
push(a*b);
break;
case '/':
a = pop();
b = pop();
if(a == 0){
printf("Cannot divide by zero\n");
break;
}
printf("%d\n", b/a);
push(b/a);
break;
case '.':
a = pop();
push(a);
printf("Current value on top of stack: %d\n", a);
break;
default:
a = pop()*10+atoi(s);
push(a);
}
} while (s! = 'Q');
Другая проблема в вашем коде связана с функцией pop. Что вы хотите сделать с этим тестом:
if (p <0) {<br>
printf ("Переполнение стека \ n");
возврат 0;
}
Вы ожидаете, что указатель достигнет адреса 0?
В любом случае, надеюсь, это не твоя домашняя работа.