![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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の後ろにスペースを入れました。
みたいな対処がいるようです。
間違えているかもしれません。他の方の回答も確認して下さい。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_05.png?e8efa67)
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムの実行時に'<'でリダ...
-
正負を反転させて出力するプロ...
-
漢字のソートについて
-
*をユーザーが入力した数字の数...
-
C言語について
-
Userformの入力順序をタブオー...
-
コマンドプロンプトからのEOFの...
-
Yesならこっちへ、NOなら...
-
Excel VBAで、Application.Inpu...
-
プログラミング初心者です。 Py...
-
C言語(構造体)
-
cygwin上でのプログラミングに...
-
IF文で戻ることはできますか?...
-
getchar()について 教えてくだ...
-
4桁の数字以外を入力したらエラ...
-
C言語について質問です。 以下...
-
scanf()で、エラー対応
-
"scanf"でエンターで改行させな...
-
Javaの質問です
-
恥ずかしながらC言語解析中のプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
プログラミングの問題です 「金...
-
Eclipseコンソール表示を、リセ...
-
C言語 逆ピラミッドの作り方
-
"scanf"でエンターで改行させな...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
C言語scanf_sで何故か2回入力に...
-
Excel VBAで、Application.Inpu...
-
小数か整数かを判定する方法
-
cout関数を使っているのですが...
-
double型が正常に認識されてい...
-
scanfが2回使えない・・・?;
-
C言語でgetchar();が上手く使え...
-
WindowsでEOF
おすすめ情報