今スタックを用いて逆ポーランドを作っています。
しかし、起動はするのですがうまく起動しなく困っています。
C言語初めて2ヶ月です。
よろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int stack[MAX];
int n;
void init(void);
void push(int);
int pop(void);
int main(void)
{
char c;
int x, a, b;
init();
while (scanf("%c", &c), c != '\n') {
if (isdigit(c)) {
x = atoi(&c);
push(x);
} else {
switch (c) {
case '+' :
b = pop(); a = pop();
push(a + b);
break;
case '-' :
b = pop(); a = pop();
push(a - b);
break;
case '*' :
b = pop(); a = pop();
push(a * b);
break;
case '/' :
b = pop(); a = pop();
push(a / b);
break;
case '=' :
printf("%d\n", pop());
return 0;
case ' ' :
case '\n' :
case '\t' :
break;
default :
printf("不正な文字!!\n");
exit(1);
}
}
}
printf("数式が完成していません\n");
return 1;
}
void init(void)
{
n = 0;
}
void push(int x)
{
if (n >= MAX) {
printf("スタックが満タン\n");
exit(1);
}
stack[n] = x;
n++;
}
int pop(void)
{
if (n <= 0) {
printf("スタックは空\n");
exit(1);
}
n--;
return stack[n];
}
逆ポーランドについて
Re:逆ポーランドについて
こんな、デコボコのインデントにしたソースを載せないでください。
読みにくいし、もしかして、全角スペースでインデントしたのでは?
規約にソースの載せ方があるので読んで、貼り直してください。
>起動はするのですがうまく起動しなく困っています。
なにをいいたいのかわかりません。
>x = atoi(&c);
この使い方は恐らく間違ってます。まだ、プログラムはみてませんけど・・・
読みにくいし、もしかして、全角スペースでインデントしたのでは?
規約にソースの載せ方があるので読んで、貼り直してください。
>起動はするのですがうまく起動しなく困っています。
なにをいいたいのかわかりません。
>x = atoi(&c);
この使い方は恐らく間違ってます。まだ、プログラムはみてませんけど・・・