みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語、成績は4194432?

いつも大変お世話になり誠にありがとうございます。
標記の件。
おかしな実行結果になりました。
どうしてでしょうか?
ご回答の程宜しくお願い申し上げます。
      記
コード
#include <stdio.h>

int main(void)
{
int res;

printf("成績を入力してください。\n");
scanf("%d", &res);

printf("成績は%dです。\n", res);

switch(res){
case 1:
printf("もっとがんばりましょう。\n");
break;
case 2:
printf("もう少しがんばりましょう。\n");
break;
case 3:
printf("さらに上をめざしましょう。\n");
break;
case 4:
printf("たいへんよくできました。\n");
break;
case 5:
printf("たいへん優秀です。\n");
break;
}

return 0;
}


実行結果
C:\MinGW>test20.exe
成績を入力してください。
A
成績は4194432です。

C:\MinGW>test20.exe
成績を入力してください。
b
成績は4194432です。

C:\MinGW>test20.exe
成績を入力してください。
v
成績は4194432です。

度々申し訳ございません。
ご回答の程宜しくお願い申し上げます。

投稿日時 - 2018-04-21 01:03:39

QNo.9490713

困ってます

質問者が選んだベストアンサー

scanfの使い方もそうですが…
case文で値が1~5であるのに対し、入力値はアルファベットです。scanfの%指定子が%cであるならアルファベットの入力も問題ありません。しかしcase文の値が数字ですのでどのみちどれにも引っかかりません。

まずscanfで数値を入力するのか文字を入力するのかをはっきりさせ、%指定子を指定して下さい。

【C言語入門】scanfで数値、文字列の入力(sscanfの使い方も解説)
https://www.sejuku.net/blog/24965

そして入力文字属性が決まったらcase文の値を指定してください。

【C言語入門】switch-case文の使い方(数値、文字列で複数条件分岐
https://www.sejuku.net/blog/25267

上記プログラムであれば、1~5を入力すれば動きそうですが…。

投稿日時 - 2018-04-21 09:38:12

お礼

ご回答誠にありがとうございます。
本来なら、「1~5を入力してください。」
と入れたほうがいいですね。
4194432という数字はどこから来たのでしょうか?

投稿日時 - 2018-04-21 13:57:15

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>本来なら、「1~5を入力してください。」
>と入れたほうがいいですね。

その方が親切ですけど、
更に1~5以外が入力された場合の事も考えませんか?

投稿日時 - 2018-04-21 14:02:27

ANo.2

>どうしてでしょうか?

scanfは、そういう仕様だからとしかいえません。
"%d"は、数値として認識できる文字(数字)でなければ何もしません。
あなたの入力された文字は、それに該当しますか?
scanfの仕様をよく確認してください。

投稿日時 - 2018-04-21 03:54:53

お礼

ご回答誠にありがとうございます。
本来なら、「1~5を入力してください。」
と入れたほうがいいですね。

投稿日時 - 2018-04-21 13:54:24

ANo.1

>int res;
>scanf("%d", &res);
整数値の入力を求めているのに
>成績を入力してください。
>A
何でこんなことするんですか?

投稿日時 - 2018-04-21 01:35:05

お礼

ご回答誠にありがとうございます。
大変失礼致しました。
今後気を付けます。
今後とも宜しくお願い致します。

投稿日時 - 2018-04-21 14:09:05