とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

Cパズルプログラミング-再帰編(4)

Karetta|Cパズルプログラミング-再帰編|四則演算
電卓作るぞ。たぶん。

Karetta|Cパズルプログラミング-再帰編|1行入力の動作確認

expr1.c

Karetta|Cパズルプログラミング-再帰編|expr1.c

#include<stdlib.h>
#include<stdio.h>
int main(void){
char*b=malloc(1024);
if(b)for(;printf("expr:"),fgets(b,1024,stdin);)printf("\t%s\n",b);
free(b);
}

Karetta|Cパズルプログラミング-再帰編|トークン処理の準備

expr2.c

Karetta|Cパズルプログラミング-再帰編|expr2.c

#include<ctype.h>
const char*GetToken(const char**s,char*t){
for(;isspace(**s);++*s);
*t++=**s;
*t=0;
return**s=='\n'||**s==0?0:++*s;
}
#include<stdlib.h>
#include<stdio.h>
int Evaluate(const char*s){
int r=0;
char*t=malloc(1024);
if(t)for(;GetToken(&s,t);)printf("\ttoken:%s\n",t);
free(t);
return r;
}
int main(void){
char*b=malloc(1024);
if(b)for(;printf("expr:"),fgets(b,1024,stdin);Evaluate(b))printf("\t%s\n",b);
free(b);
}

グローバル変数が気にくわないんでローカルでmalloc使ってみた。つうか,再帰でてこないぞ。