点ああが何であるかに関与する本当に単純な単純な算術計算コード、
私の欺瞞実装は、strrchrので、いくつかのバグにつながる、何のオートコンプリート、自分自身を達成するために、再びコード、無通勤時間以上の120行の結果をATOIませんが、時間が、醜いコードタイトで、機能設計にも無理があります:
私はない、とそれの結果は、バグの半分を占めている場合、他の場合、これは基本的に、私がもしあればそのコードは一口に見えるので、他にこのあまり好きではない場合に使用しました。
する#include <stdio.hに> する#include <STDLIB.H> の#include <string.hの> typedefを列挙 { SYM_ADD = 0、 SYM_DEL、 SYM_MUL、 SYM_DIV、 SYM_INVALID } ENUM_Calc_SYM; CHAR * findChr(INPUT CONSTチャー*、チャーCHR) { のconstのchar *のPOS = INPUT; IF(INPUT == NULL) 戻りNULL; しばらく(* POS = '\ 0'!) { IF(POS * == CHR) { IF(CHR == ' - ')//機能が汚染関数であり、これは、取り出すべき { IF((POSを!=入力)&&(*(-pos 1)> = '0')&&(*(-pos。1)<=」9' ) ) リターン(のchar *)POS。 } 他の { リターン(のchar *)POS。 } } POS ++。 } NULLを返します。 } int型str2int(CONSTのchar *入力、INT * A) { int型validFlag = 0。 INTフラグ= 1。 int型の合計= 0; CONSTのchar *のPOS =入力。 IF(NULL ==入力|| NULL == A) リターン-1。 一方、(!* POS = '\ 0') { IF(* POS == ' - ') フラグ= -1。 そうであれば(* POS> = '0' && * POS <= '9') { validFlag = 1。 合計=合計* 10台の+ * POS - '0'; }他 { 破ります。 POS ++; } (validFlag == 0)の場合は -1を返します。 合計=フラグ*合計。 * =合計。 0を返します。 } ボイドparseCmd(CHAR *入力、INT *、int型* Bを、int型*フラグ) { チャー*のPOS = NULL; (NULL ==入力)場合は リターン。 (NULLが|| NULL == NULL || B ==フラグ==)場合 リターン; *フラグ= SYM_INVALID。 (!(POS = findChr(入力、 '+'))= NULL)であれば { *フラグ= SYM_ADD。 } そうであれば((POS = findChr(入力、 ' - '))= NULL!) { *フラグ= SYM_DEL。 } そうであれば((POS = findChr(入力、 '*'))!= NULL) { *フラグ= SYM_MUL。 } そうであれば((POS = findChr(入力、 '/'))= NULL!) { *フラグ= SYM_DIV。 } IF(NULL == POS) のリターン; * POS = '\ 0'; POS ++; (!= 0 str2int(入力A)|| 0 = str2int(POS、B))であれば { *フラグ= SYM_INVALID。 } を返します。 } ボイドメイン() { 文字入力[100] = {0}。 、B int型。 int型のフラグ。 (scanf関数( "%sの"入力)== 1)一方 { フラグ= SYM_INVALID。 parseCmd(入力、および、&B、&フラグ)。 memsetの(入力、0、はsizeof(入力))。 もし(フラグ== SYM_INVALID) ブレーク。 スイッチ(フラグ) { ケースSYM_ADD: のprintf( "%d個の\ n"、A + B)。 ブレーク; ケースSYM_DEL: のprintf( "%d個の\ n"、AB)。 ブレーク; ケースSYM_MUL: のprintf( "%d個の\ n"、*のB)。 ブレーク; ケースSYM_DIV: もし(B == 0) ブレーク。 printf( "%Fを\ n"、(フロート)A / B)。 ブレーク; デフォルト: 休憩; } } }
ただ、テストをだますために、コードの20行が十分にあります。
する#include <stdio.hに> する#include <STDLIB.H> の#include <string.hの> ボイドメイン() { 文字入力[100] = {0}。 、B int型。 int型のフラグ。 一方、(scanf関数( "%s"は、入力)== 1) { IF(のsscanf(入力、 "%のD +%のD"、&、&B)== 2) { のprintf( "%d個の\ n"、+ B ); } IF(のsscanf(入力、 "%D-%D"、&、&B)== 2) { のprintf( "%Dを\ n"、AB)。 } IF(のsscanf(入力、 "%d個の*%dの"、&、&B)== 2) { のprintf( "%Dを\ n"、*のB)。 } IF(のsscanf(入力、 "%D /%D"、&、&B)== 2) { のprintf(」