
忙しい中失礼します。
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関数では直接の加減乗除入力を受け付けていない?ものなのでしょうか?もしあるのでしたら、その方法も教えて下さい。
どなたか分かる方がいらっしゃいましたら、回答願います。自分の知識の中では曖昧なのでハッキリした回答が欲しいのです。
No.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;』という式を正しくは計算できません。
・以上。
忙しい中にも拘らず、丁寧な指摘、丁寧な回答を有難うございます。
感謝します。
やはり、計算式を作る必要があるのですね。
とても納得する回答を有難うございました。
No.1
- 回答日時:
>そもそもscanf関数では直接の加減乗除入力を受け付けていない?
ないです。
キーボードから入力できるのは「文字列」だけです。それを scanf は引数に指定された書式指定子に従って「数値」や「文字」に変換しているだけです。
man scanf に記載されている書式指定以外のことは scanf にはできません。
そして変数に「演算子」を格納することはできないので 9 'chr' 2 なる書き方もできません。
なので、scanf で文字として変数 chr を格納した後、自前で
if ( chr == '+' ) {
num1 = 9 + 2;
} ...
と「文字」を「演算子」に変換してやる必要があります。
忙しい中の時間を割いての回答有難うございます。
これで私の中でscanfは加減乗除を受け付けないことがハッキリしました。
また、アドバイス有難うございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1年単利金利 0.2% の A銀行と...
-
for文について
-
getcの改行判定
-
プログラミングで二番目に大き...
-
素因数分解のプログラムを作成...
-
for文の中にswitch文はいれられ...
-
構文エラー";"が型の前にあり...
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
-
「Aに対するBの割合」と「Aに対...
-
Aの値からBの値を除するとは??
-
プログラミング初心者です。 Py...
-
DWORDの実際の型は何でしょうか
-
ヌメロンのプログラム
-
O(n log n)について2
-
複数桁10進数の*桁目だけを抽出...
-
コンパイルエラー: LNK2001
-
こんにちは。いつもお世話にな...
-
エクセルで可視セルにのみ値貼...
-
至急教えてください!プログラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
配列を使って魔方陣
-
プログラミングで二番目に大き...
-
getcの改行判定
-
C言語の二分法のプログラムにつ...
-
C言語階乗の総和を求める
-
C言語 プログラム
-
c言語のプログラミングでこま...
-
1からnまでの和を求めるプログ...
-
初心者です。for文、if文を使っ...
-
計算結果がlong型以上になる場...
-
while文について、c言語...
-
最大値と最小値を表示したいの...
-
scanf関数を用いての加減乗除%...
-
プログラムの内容
-
10進数からN進数に変換するプロ...
-
scanfが実行されません
おすすめ情報