C/C++の宿題を片づけます 51代目

このエントリーをはてなブックマークに追加
922名無し
[1] 授業単元:電卓
[2] 問題文:
  入力:二つの10進数(非負の整数、4桁以下で符号無し)を加算記号"+"、減算記号"-"、で連結し最後に等号を付け加えた式を文字列として入力。
  操作:入力された文字列から加算記号、減算記号、等号を区切り記号として二つの10進数を文字列として切り出す。
     切り出した文字列を数値に変換する。加減算を行って結果を計算。
  出力:計算結果を等号"="の後ろに出力。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [2005年10月29日9:00まで]
[5] その他の制限:特にはありません。
ちょっとわからないので、よろしくお願いします。

923デフォルトの名無しさん:2005/10/26(水) 20:12:43
>>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;
}

924デフォルトの名無しさん:2005/10/26(水) 20:14:26
>>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;
}