電卓を作ろうとしているのですが、キーボード入力で
1+2
としたら2の後ろになにか文字みたいなものがあるのでしょうか?
文字列なら一番最後にNULLが存在するので疑問に思ったのでどうか教えてください。
お願いします。
キーボード入力について
Re:キーボード入力について
文字列は分かりませんが、
多分一番簡単な電卓プログラムを作ってみました。
参考にしてください。
多分一番簡単な電卓プログラムを作ってみました。
参考にしてください。
#include<stdio.h> int main() { int num1,num2; char enzan; int resultA; double resultB; printf("%%d%%c%%dの順で入力してください。\n"); while(1) { scanf("%d%c%d",&num1,&enzan,&num2); switch(enzan) { case '+': resultA=num1+num2; break; case '-': resultA=num1-num2; break; case '*': resultA=num1*num2; break; case '/': if(num2==0) { printf("0除算エラーです。\n"); return -1; } resultB=(double)num1/num2; break; } if(enzan!='/') { printf("=%d\n",resultA); }else{ printf("=%1.2f\n",resultB); } } return 0; }
Re:キーボード入力について
nonさんありがとうございます。
それとすいません。入力形式は
int c;
c=getchar();
です。この場合ではどうなるのでしょうか?
お願いします。
それとすいません。入力形式は
int c;
c=getchar();
です。この場合ではどうなるのでしょうか?
お願いします。
Re:キーボード入力について
TKOZさんありがとうございます。今自分が作っているプログラムはLR構文解析表をつかって作ろうとしているのですが、どこで計算が終わるかの条件として
1+2
の後ろに何かないか疑問に思ったのですが、すいませんあいまいな質問をしてしまって。
下記に自分が作ったLR構文解析表を記しました。別にこれがどうこうということではないのですが、
一応こういうプログラムを作るということで、貼っておきます。
何度もすいませんが、1+2を
int c;
c=getchar();
でキーボード入力したら、2の後ろになにか文字みたいなものがつくのでしょうか?
この後ろに、トークンの切り取りと、生成規則の条件があります。
1+2
の後ろに何かないか疑問に思ったのですが、すいませんあいまいな質問をしてしまって。
下記に自分が作ったLR構文解析表を記しました。別にこれがどうこうということではないのですが、
一応こういうプログラムを作るということで、貼っておきます。
何度もすいませんが、1+2を
int c;
c=getchar();
でキーボード入力したら、2の後ろになにか文字みたいなものがつくのでしょうか?
#include<stdio.h> #include<ctype.h> int gettoken(int *); int c; int main(void) { struct sr{ char s; int n; }; struct sr pta[12][6]={ /* i + * ( ) $ */ {{'s',5},{'e',0},{'e',0},{'s',4},{'e',0},{'e',0}}, //0 {{'s',0},{'s',6},{'e',0},{'e',0},{'e',0},{'a',0}}, //1 {{'e',0},{'r',2},{'s',7},{'e',0},{'r',2},{'r',2}}, //2 {{'e',0},{'r',4},{'r',4},{'e',0},{'r',4},{'r',4}}, //3 {{'s',5},{'e',0},{'e',0},{'s',4},{'e',0},{'e',0}}, //4 {{'e',0},{'r',6},{'r',6},{'e',0},{'r',6},{'r',6}}, //5 {{'s',5},{'e',0},{'e',0},{'s',4},{'e',0},{'e',0}}, //6 {{'s',5},{'e',0},{'e',0},{'s',4},{'e',0},{'e',0}}, //7 {{'e',0},{'s',6},{'e',0},{'e',0},{'s',11},{'e',0}},//8 {{'e',0},{'r',1},{'s',7},{'e',0},{'r',1},{'r',1}},//9 {{'e',0},{'r',3},{'r',3},{'e',0},{'r',3},{'r',3}},//10 {{'e',0},{'r',5},{'r',5},{'e',0},{'r',5},{'r',5}} //11 }; int ptg[12][3]={ {1,2,3}, {0,0,0}, {0,0,0}, {0,0,0}, {8,2,3}, {0,0,0}, {0,9,3}, {0,0,10}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} };
この後ろに、トークンの切り取りと、生成規則の条件があります。
Re:キーボード入力について
1+2
の後に普通は改行を入力すると思います。
そうでないと式が終わったかどうかわかりませんからね。
したがって、getcharを使うなら、'\n'を式の終わりと
判断するのが一般的でしょう。
また、改行を入力しないと、バッファから取り込まれないし。
そういう回答でいいでしょうか?
の後に普通は改行を入力すると思います。
そうでないと式が終わったかどうかわかりませんからね。
したがって、getcharを使うなら、'\n'を式の終わりと
判断するのが一般的でしょう。
また、改行を入力しないと、バッファから取り込まれないし。
そういう回答でいいでしょうか?