忙しい中失礼します。
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
配列を関数に渡す方法
-
C言語でのトランプシャッフルに...
-
プログラミングに関して
-
for文の中にswitch文はいれられ...
-
10進数からN進数に変換するプロ...
-
プログラム
-
scanf関数を用いての加減乗除%...
-
プログラミングで二番目に大き...
-
C言語で電卓を作成する。
-
SIGALRMでプロセス終了
-
配列を使って魔方陣
-
n個からm個を取り出すプログ...
-
素因数分解のプログラムを作成...
-
C言語での引数の省略方法
-
エクセルで可視セルにのみ値貼...
-
マイナスからプラスへ転じた時...
-
DWORDの実際の型は何でしょうか
-
「指定されたキャストは有効で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
配列を使って魔方陣
-
C言語階乗の総和を求める
-
配列を関数に渡す方法
-
プログラミングで二番目に大き...
-
10進数からN進数に変換するプロ...
-
getcの改行判定
-
C言語の二分法のプログラムにつ...
-
C言語プログラムが理解できなくて…
-
C言語初心者です。次の問題で質...
-
while文を使った問題なのですが...
-
c言語のプログラムで
-
c言語で平均をだす
-
C言語 数字以外を入力させない...
-
プログラム
-
和を求める問題
-
初心者です。for文、if文を使っ...
-
C言語で電卓を作成する。
おすすめ情報