電卓を作ろうとしているのですが、キーボード入力で
1+2
としたら2の後ろになにか文字みたいなものがあるのでしょうか?
文字列なら一番最後にNULLが存在するので疑問に思ったのでどうか教えてください。
お願いします。
キーボード入力について
-
KEYONN_
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}
};
この後ろに、トークンの切り取りと、生成規則の条件があります。
-
non
Re:キーボード入力について
1+2
の後に普通は改行を入力すると思います。
そうでないと式が終わったかどうかわかりませんからね。
したがって、getcharを使うなら、'\n'を式の終わりと
判断するのが一般的でしょう。
また、改行を入力しないと、バッファから取り込まれないし。
そういう回答でいいでしょうか?
の後に普通は改行を入力すると思います。
そうでないと式が終わったかどうかわかりませんからね。
したがって、getcharを使うなら、'\n'を式の終わりと
判断するのが一般的でしょう。
また、改行を入力しないと、バッファから取り込まれないし。
そういう回答でいいでしょうか?