ID非公開さん
2022/1/23 2:55
1回答
C言語でRPN電卓を作りたいのですが、fgets関数を使って実装する場合とスタックを配列使って実装する場合それぞれどのようなプログラミングになるのか知りたいです。
C言語でRPN電卓を作りたいのですが、fgets関数を使って実装する場合とスタックを配列使って実装する場合それぞれどのようなプログラミングになるのか知りたいです。 全体構造ではなく一部だけでもいいのでお願いします。
C言語関連・194閲覧・50
ベストアンサー
(ID非公開) 以前に誰かに解答したプログラム 四則演算のみです 使える演算子は +, -, *, /, . の5種でピリオドはスタックの表示です 参考: //RPN calc #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> double stk[16]; int sp=0; int push(double a){ if(sp>=16){ puts("stack over"); return 0; } stk[sp]=a; sp++; return 0; } int pop(double *a){ if(sp<=0){ puts("stack under"); return 1; } sp--; *a=stk[sp]; return 0; } void dump(){ int i; for(i=0;i<sp;i++) printf("%g\n",stk[i]); } int ope(char *s){ double a=5,b=5; char c= *s; int ret; if(isdigit(*s))c='0'; switch(c){ case '0': ret=push(atof(s)); if(ret!=0)return 1; break; case '+': if(pop(&b))return 1; if(pop(&a))return 1; if(push(a+b))return 1; break; case '-': if(pop(&b))return 1; if(pop(&a))return 1; if(push(a-b))return 1; break; case '*': if(pop(&b))return 1; if(pop(&a))return 1; if(push(a*b))return 1; break; case '/': if(pop(&b))return 1; if(pop(&a))return 1; if(push(a/b))return 1; break; case '.': dump(); break; default: puts("error"); return 1; } return 0; } int main(void){ char s[128]; char *p,*q; int ret; printf(">"); fgets(s,128,stdin); p=s; q=s; while(q!=NULL){ q=strtok(p," "); p=NULL; if(q!=NULL){ ret=ope(q); if(ret)break; } } return 0; } ~~~~~~~~~~~~~~~~~~~~ >2.34 4.56 + . 6.9 >100 30 - . 70 ・3角形の面積 >5 3 * 2 / . 7.5 ・半径5の円の円周長 >5 2 * 3.14 * . 31.4 >5 2 3.14 * * . 31.4
質問者からのお礼コメント
ありがとうございました
お礼日時:1/24 21:39