忙しい中失礼します。
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
10進数からN進数に変換するプロ...
-
配列を使って魔方陣
-
配列を関数に渡す方法
-
while文について、c言語...
-
if-else文および標準演算子(*...
-
C言語 数字以外を入力させない...
-
C言語です
-
c言語プログラミングで1から100...
-
raspberrypiでロータリエンコーダ
-
C言語。どうしてコンパイルでき...
-
改善すべき点を教えてください。
-
C++での乱射ショットについて教...
-
getcの改行判定
-
ガウスの消去法のプログラムが...
-
C言語:配列の最大値
-
while文を使った問題なのですが...
-
c言語です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
プログラム
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
配列を使って魔方陣
-
getcの改行判定
-
配列を関数に渡す方法
-
プログラミングで二番目に大き...
-
C言語階乗の総和を求める
-
scanf関数を用いての加減乗除%...
-
C言語で電卓を作成する。
-
C言語 プログラム
-
C言語の二分法のプログラムにつ...
-
C言語のwhile文を使った素数判...
-
while文について、c言語...
-
10進数からN進数に変換するプロ...
-
C言語です
-
C言語でのトランプシャッフルに...
-
全角文字の判定
-
C言語のプログラミング (基礎...
おすすめ情報