「みんな教えて! 選手権!!」開催のお知らせ

忙しい中失礼します。
C言語超初心者のものです。加減乗除入力方法について質問があります。
現在、scanf関数を用いて直接の加減乗除%+-*/を入力することにより、9-2=7なり、9*2=18なり、9/2=4なりの回答を出してみたいと思っているのですが、例2の文に変更した後、コンパイルしようとするとエラー(parse error before '2' )が出ます。
どのようにすれば、このエラーはなくなりますか?また、エラーがなくなれば、直接の加減乗除は可能でしょうか?

現在習っているC言語レベル:
int、 scanf、 if-else 位です。

プログラム
例1
int main()
{
int num1, num2;
char chr;

printf("Enter an operator (* / + - %%): ");
scanf("%c",&chr);
scanf("%c",&num2);

num1 = 9 - 2;
printf("%d - %d = %d\n", 9, 2, num1);

system("pause");
return 0;
}

 9-2=7
 

 例2:
num1 = 9 'chr’ 2;
printf("%d %c %d = %d\n", 9, 'chr', 2, num1);

scanfを用いてのキーボードからの”数値”の入力についての回答は沢山見つかるのですが、加減乗除入力についての回答はありませんでした。http://oshiete1.goo.ne.jp/qa1917724.htmlから多分”直接”の加減乗除入力なんてないのだろうな・・・と思いつつもどのページも’ハッキリ’とは書いていないので、質問しました。
そもそもscanf関数では直接の加減乗除入力を受け付けていない?ものなのでしょうか?もしあるのでしたら、その方法も教えて下さい。
どなたか分かる方がいらっしゃいましたら、回答願います。自分の知識の中では曖昧なのでハッキリした回答が欲しいのです。

A 回答 (2件)

★ハッキリ言って演算子は入力できません。


・ただし演算子を文字型(char型)として変数に格納することは出来ます。
 その後に文字型変数より演算子の文字をチェックして四則演算の式を記述します。
 この方法ならできるでしょうね。
・それから
>scanf("%c",&num2);
 ↑
 これは書式制御文字が間違っています。
 『num2』は int 型です。%d として数値を変数に格納するなら分かりますけど。
・その他にも
>num1 = 9 'chr’ 2;
 ↑
 これはエラーが発生します。
 『9』『'char'』『2』としても『9』『演算子』『2』を式として計算は出来ません。
>printf("%d %c %d = %d\n", 9, 'chr', 2, num1);
 ↑
 こちらは『'chr'』がおかしいです。
 『char』で良い。
・やりたいことは下記のようにしたいのですよね。

サンプル:
int main( void )
{
 int ans, num1, num2;
 char ope; // 演算文字
 
 scanf( "%d", &num1 );
 scanf( " %c", &ope );
 scanf( "%d", &num2 );
 
 switch ( ope ){
  case '+': ans = num1 + num2; break;
  case '-': ans = num1 - num2; break;
  case '*': ans = num1 * num2; break;
  case '/': ans = num1 / num2; break;
  case '%': ans = num1 % num2; break;
  default:  printf( "演算子エラーです。\n" );
 }
 printf( "%d %c %d = %d\n", num1, ope, num2, ans );
 return 0;
}

その他:
・上記のように ope という文字型変数に演算子を文字として格納します。
 その後に ope という文字型を switch 文などで四則演算を分けます。
 この方法なら期待通りになります。
・ちなみに C 言語はコンパイラ型です。
 バッチファイルなどのようなインタプリタ型では変数に演算子を入れて計算できることも
 ありますがコンパイラ型は『num1 = 9 'chr’ 2;』という式を正しくは計算できません。
・以上。
    • good
    • 0
この回答へのお礼

忙しい中にも拘らず、丁寧な指摘、丁寧な回答を有難うございます。
感謝します。
やはり、計算式を作る必要があるのですね。
とても納得する回答を有難うございました。

お礼日時:2007/10/05 08:55

>そもそもscanf関数では直接の加減乗除入力を受け付けていない?


ないです。

キーボードから入力できるのは「文字列」だけです。それを scanf は引数に指定された書式指定子に従って「数値」や「文字」に変換しているだけです。

man scanf に記載されている書式指定以外のことは scanf にはできません。
そして変数に「演算子」を格納することはできないので 9 'chr' 2 なる書き方もできません。

なので、scanf で文字として変数 chr を格納した後、自前で

if ( chr == '+' ) {
 num1 = 9 + 2;
} ...

と「文字」を「演算子」に変換してやる必要があります。
    • good
    • 0
この回答へのお礼

忙しい中の時間を割いての回答有難うございます。
これで私の中でscanfは加減乗除を受け付けないことがハッキリしました。
また、アドバイス有難うございます。

お礼日時:2007/10/05 08:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報