質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

0回答

702閲覧

逆ポーランド記法での電卓をつくっており、一部の中身がわからない(あっているかがわからないです)

otasann

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2020/12/02 03:45

編集2020/12/02 04:44

逆ポーランド記法での電卓をつくっているのですが'+', '-', '*', '/', '=', 'd' : sp=0が繰り返し出ているだけで、答えが出ないです。
教えてください。検索してみたのですがいまいちわからないです。
#include<stdio.h>
#define SIZE 5
double stack[SIZE];
int sp;

void push(double value);
double pop(void);
int isFull(void);
int isEmpty(void);
void display(void);
void initialize(void);

int main(void)
{
initialize();
double data;
double cal1, cal2;
char resp;

while(1){
printf(" '+', '-', '*', '/', '=', 'd' : ");
scanf("%c", &resp);

if( resp == '=' ) break;

switch(resp){
case '+':
cal1=pop();
cal2=pop();
push(cal1+cal2);
break;

case '-':
cal1=pop();
cal2=pop();
push(cal1-cal2);
break;

case '':
cal1=pop();
cal2=pop();
push(cal1
cal2);
break;

case '/': cal1 = pop();
cal2 = pop();
push( cal2 / cal1 );
break;

case 'd': printf("data : "); scanf("%lf", &data);
push( data );
break;
}
printf("sp=%d\n", sp);
}

display();

return 0;
}

void push(double value)
{
if( isFull() ){
printf("スタックが満杯で入りませんでした\n");
}else{
stack[sp++] = value;
}
}

double pop(void)
{
if(sp<=0)return 0;
sp--;
return stack[sp];
}

int isFull(void)
{
if(sp>=SIZE){
return 1;
}
return 0;
}

int isEmpty(void)
{
if(sp <= 0){
return 1;
}else{
return 0;
}
}

void display(void)
{
printf("\n");
for(int i=0; i<sp; i++){
printf("stack[%d]=%lf \n", i, stack[i]);
}
}

void initialize(void)
{
sp = 0;
}

エラー文
'+', '-', '', '/', '=', 'd' : sp=1
'+', '-', '
', '/', '=', 'd' : sp=1
'+', '-', '', '/', '=', 'd' : sp=1
'+', '-', '
',

ideoneを使用してWindowsで動かしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otasann

2020/12/02 03:51

すみません。
DreamTheater

2020/12/02 04:04

書き直す前にteratailの質問の仕方をよーーく読んでください。 ソースコードはどのように投稿するか書かれています。 インデントもないソースコードは読む気もしません!
KoichiSugiyama

2020/12/02 05:05

「検索してみたのですがいまいちわからないです」とありますが、どのような検索ワードで検索したのか、その結果どのサイトのどういう部分がわからなかったかを追記してもらえれば、現状の理解に沿ったアドバイスがしやすいと思います。
dodox86

2020/12/02 05:34

> 繰り返し出ているだけで、答えが出ないです。 ただENTERを押しているだけでは。もしかして、提示されたプログラム自体の使い方(入力の仕方)がご自身で分かっていない、ということはありませんか?
ozwk

2020/12/04 04:42

d1d2+= を入力したら stack[0]=3.000000 が得られましたけど?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問