922 :
名無し:
[1] 授業単元:電卓
[2] 問題文:
入力:二つの10進数(非負の整数、4桁以下で符号無し)を加算記号"+"、減算記号"-"、で連結し最後に等号を付け加えた式を文字列として入力。
操作:入力された文字列から加算記号、減算記号、等号を区切り記号として二つの10進数を文字列として切り出す。
切り出した文字列を数値に変換する。加減算を行って結果を計算。
出力:計算結果を等号"="の後ろに出力。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月29日9:00まで]
[5] その他の制限:特にはありません。
ちょっとわからないので、よろしくお願いします。
>>922 ろくにエラーチェックもしてないし冗長だと思うから、まぁ参考程度にしてくれ
最近Pascalばっかやらされてて感覚が鈍ってた_| ̄|○
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
char expr[80];
int i, op1=0, op2=0, len, flag = 0;
fgets(expr, 80, stdin);
len = strlen(expr) - 1;
expr[len] = '\0';
for (i=0;i<len;i++) {
if (isdigit(expr[i])) {
if (!(flag & 1)) {
op1 = op1*10 + (expr[i] - '0');
} else {
op2 = op2*10 + (expr[i] - '0');
}
continue;
}
>>923の続き
if (expr[i] == '+') {
flag |= 1;
flag |= (1<<1);
continue;
} else if (expr[i] == '-') {
flag |= 1;
flag |= (1<<2);
continue;
} else if (expr[i] == '=') {
if (flag & (1<<1)) {
printf("%s %d\n", expr, op1+op2);
} else {
printf("%s %d\n", expr, op1-op2);
}
break;
}
/* Error handling */
puts("Syntax Error!");
return -1;
}
return 0;
}