■この記事の概要
この記事では、C言語を使って四則演算のみをサポートする簡単な電卓プログラムの実装例を紹介しています。
switch文や標準入力など、基本的な構文に基づき初歩的なプログラミング知識を養うことができます。
■このコードは手抜きです
・ゼロ割り算を回避していません。
・1+1は出来ますが、1+1+1は出来ません
・+-*/の四則演算しか出来ません
・演算子が2文字以上の考慮はしていません(<<とか)
■sscanfを使った簡易電卓
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int calc(int num1,char op,int num2){
switch(op){
case '+': return num1+num2;
case '-': return num1-num2;
case '*': return num1*num2;
case '/': return num1/num2;
}
fprintf(stderr,"未サポートの演算子 %c\n",op);
return -1;
}
int main(void){
printf("Ctrl dか空行で終了\n");
for(;;){
printf("数字 演算子 数字を入れてね");
char buf[BUFSIZ];
if(fgets(buf,BUFSIZ,stdin) == NULL){
break; //標準入力終了でループ終了
}
if(buf[0] == '\n'){
break; //空行でループ終了
}
int num1,num2;
char op;
int ret = sscanf(buf,"%d %c %d",&num1,&op,&num2);
if(ret != 3){ //3単語無い時は再入力
continue ; //ループ続行
}
printf("答え %d\n",calc(num1,op,num2));
}
}
このコードで学習できること
・switch文マルチステートメントの書き方
・標準入力終了判定
・空行判定
・sscanfに字句解析をお任せす方法
■argc,argvを使った簡易電卓
//コマンド行の引数で四則演算する
#include <stdio.h>
#include <stdlib.h>
int calc(int x,char op,int y){
switch(op){
case '+': return x + y;
case '-': return x - y;
case '*': return x * y;
case '/': return x / y;
default:
puts("四則演算子を指定して下さい");
puts("掛け算は * でなくて ¥* と指定して下さい");
return -1;
}
}
int main(int argc,char *argv[]){
if(argc != 4){
puts("数字 四則演算子 数字を指定して下さい");
return -1;
}
int x = atoi(argv[1]);
char op = argv[2][0];
int y = atoi(argv[3]);
printf("%d %c %d = %d\n",
x,op,y,calc(x,op,y));
}
このコードで学習できること
・argc,argvのコマンドラインの使い方
・atoi関数の使い方
・文字列の先頭一文字の取り出し方法
■より高度な電卓は
「C言語 逆ポーランド記法」でググって実装してみて下さい。
聖典書籍 「プログラミング言語C」では、
逆ポーランド記法が詳細解説されています。
参考:
逆ポーランド記法