キーボード入力について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
もちもち

キーボード入力について

#1

投稿記事 by もちもち » 16年前

電卓を作ろうとしているのですが、キーボード入力で

1+2

としたら2の後ろになにか文字みたいなものがあるのでしょうか?

文字列なら一番最後にNULLが存在するので疑問に思ったのでどうか教えてください。
お願いします。

non

Re:キーボード入力について

#2

投稿記事 by non » 16年前

getsで入力した場合は、自動的に'\0'が追加されます。

KEYONN_

Re:キーボード入力について

#3

投稿記事 by KEYONN_ » 16年前

文字列は分かりませんが、
多分一番簡単な電卓プログラムを作ってみました。
参考にしてください。
#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:キーボード入力について

#4

投稿記事 by もちもち » 16年前

nonさんありがとうございます。

それとすいません。入力形式は


int c;

c=getchar();

です。この場合ではどうなるのでしょうか?
お願いします。

もちもち

Re:キーボード入力について

#5

投稿記事 by もちもち » 16年前

TKOZさんありがとうございます。今自分が作っているプログラムはLR構文解析表をつかって作ろうとしているのですが、どこで計算が終わるかの条件として

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:キーボード入力について

#6

投稿記事 by non » 16年前

1+2
の後に普通は改行を入力すると思います。
そうでないと式が終わったかどうかわかりませんからね。
したがって、getcharを使うなら、'\n'を式の終わりと
判断するのが一般的でしょう。
また、改行を入力しないと、バッファから取り込まれないし。

そういう回答でいいでしょうか?

もちもち

Re:キーボード入力について

#7

投稿記事 by もちもち » 16年前

nonさんありがとうございました。

手伝ってくれた皆様も本当にありがとうございました。

無事完成することができました。

閉鎖

“C言語何でも質問掲示板” へ戻る