忙しい中失礼します。
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も見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
ことしの初夢、何だった?
2025年になりましたね。1年の吉凶を占う風習といわれている初夢。ことし初めて見た夢、覚えていますか?
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
【お題】追い込まれた犯人が咄嗟に言った一言とは?
-
C言語で電卓を作成する。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語で平均をだす
-
scanfが実行されません
-
10進数からN進数に変換するプロ...
-
getcの改行判定
-
配列を関数に渡す方法
-
信頼区間の1.96や1.65ってどこ...
-
「Aに対するBの割合」と「Aに対...
-
ある商品のロス率を5%見込み、...
-
2÷3などの余りについて
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
Aの値からBの値を除するとは??
-
O(n log n)について2
-
Enterキーを押されたら次の処理...
-
干支のプログラム
-
複数桁10進数の*桁目だけを抽出...
-
コマンドプロンプトのウィンド...
-
C言語 プログラミング ごめんな...
-
変数とパラメータとは違うもの...
-
int16_t の _t は何?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
#if 1 #elseの意味について
-
プログラミングで二番目に大き...
-
getcの改行判定
-
配列を関数に渡す方法
-
配列を使って魔方陣
-
10進数からN進数に変換するプロ...
-
scanf関数を用いての加減乗除%...
-
while文について、c言語...
-
初心者です。for文、if文を使っ...
-
C言語階乗の総和を求める
-
行列をべき乗させるプログラム
-
プログラム
-
C言語のwhile文を使った素数判...
-
C言語プログラムが理解できなくて…
-
scanfが実行されません
-
C言語。どうしてコンパイルでき...
-
while文を使った問題なのですが...
-
C言語 入力した数値の平均値の...
おすすめ情報