
C言語初心者です。次のプログラムの実行結果が、その下のようになりました。
(プログラムソース)
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a, b;
nyuuryoku:
printf("2つの整数a、bを入力してください。\n");
printf("a = ?"); scanf("%d", &a);
printf("b = ?"); scanf("%d", &b);
printf("復唱:\n");
printf("a = %d\nb = %d\n", a, b);
printf("a + b = %d\n", a + b);
printf("続けますか?[y/n]");
y_or_n:
while(1)
{
switch (getchar())
{
case 'y':
case 'Y':
printf("\n");
goto nyuuryoku;
case 'n':
case 'N':
return EXIT_SUCCESS;
default:
{
printf("yまたはnを入力してください。\n");
goto y_or_n;
}
}
}
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
(実行結果)
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
2つの整数a、bを入力してください。
a = ?(1と入力)
b = ?(5と入力)
復唱:
a = 1
b = 5
a + b = 6
続けますか?[y/n]yまたはnを入力してください。
yまたはnを入力してください。(mと入力)
yまたはnを入力してください。(nと入力)
(終了)
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
上の実行結果で、意図している動作は、
「続けますか?[y/n]」
のところで入力待ちをして、'm'が入力されると
「yまたはnを入力してください。」
と表示されて、次の入力の待ちになることです。
しかし、上の実行結果のように、入力待ちの前に
「yまたはnを入力してください。」
が余分に1回表示されてしまいます。
defaultラベルではなく、if文でwhile()の前とか後とかに指定していくつかやってみましたが、同じことになってしまいます。
どこがいけないのでしょうか? どうすれば意図した動作をしてくれるのでしょうか。
多分初歩の初歩のところでつまづいているのだと思いますが、よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
printf("b = ?"); scanf("%d", &b);
のところで、
入力の文字の読み残りが出るようです。具体的には、末尾の改行コード。
よって、
printf("b = ?"); scanf("%d ", &b);//dの後ろにスペースを入れました。
みたいな対処がいるようです。
間違えているかもしれません。他の方の回答も確認して下さい。

No.2
- 回答日時:
あまり詳しくないのですがこんなのでどうですかね
あまり深く考えないで回答してますので意図しているものと違っていたら言ってくださいね
#include <stdio.h>
int main(void)
{
int a, b;
char ans;
do {
printf("2つの整数a、bを入力してください。\n");
printf("a = ?"); scanf("%d", &a);
printf("b = ?"); scanf("%d", &b);
printf("復唱:\n");
printf("a = %d\nb = %d\n", a, b);
printf("a + b = %d\n", a + b);
printf("続けますか?[y/n]\n");
scanf("%*c%c", &ans);
while(ans!='y') {
printf("yまたはnを入力してください\n");
scanf("%*c%c", &ans);
if (ans=='n') break;
}
}while(ans=='y');
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
scanfの入力をgets関数で読み捨...
-
C言語 行列計算
-
C言語初心者です。ファイルの読...
-
小数か整数かを判定する方法
-
プログラミングの問題で、キー...
-
電卓の小数点
-
scanf が無視されます
-
4桁の数字以外を入力したらエラ...
-
数字以外が入力されたらエラー...
-
c言語応用で血液型判定プログ...
-
Linuxで入力待ちなしkeyread関...
-
Javaの質問です
-
C言語で作成したプログラムの...
-
Eclipseコンソール表示を、リセ...
-
C++:cinが上手く使えない
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
c languageで 簡単な質問があ...
-
エクセルで可視セルにのみ値貼...
-
20'(角度)の計算がわかりま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
コマンドプロンプトからのEOFの...
-
4桁の数字以外を入力したらエラ...
-
Eclipseコンソール表示を、リセ...
-
Excel VBAで、Application.Inpu...
-
"scanf"でエンターで改行させな...
-
cout関数を使っているのですが...
-
プログラミングの問題です 「金...
-
scanf関数について
-
Userformの入力順序をタブオー...
-
C言語でgetchar();が上手く使え...
-
プログラムの実行時に'<'でリダ...
-
C言語初心者です。ファイルの読...
-
scanf が無視されます
-
実行結果の順番がおかしいんで...
-
C言語scanf_sで何故か2回入力に...
おすすめ情報