visual studio 2010 professinalで以下のソースをデバッグして
”続行するには何かキーを押してください!”
で待機させたいのですが getchar()一個だけでは実現しません。
2個重ねるとOKです。どうしてでしょうか。
-------------- 以下のようにscanf関数がなければokということは突き止めたのですが、、、。
ご教授ください。
#include <stdio.h>
int main(void)
{ int i;
printf("なにか数字を入力してください。\n");
scanf("%d",&i);
printf("今あなたが入力した数字は%dです。\n",i);
printf("続行するには何かキーを押してください!");
getchar();
//getchar();
return 0;
}
----------------------------------------------------------------
int main(void)
{
printf("続行するには何かキーを押してください!");
getchar();
return 0;
}
No.3ベストアンサー
- 回答日時:
>printf("なにか数字を入力してください。
\n");>scanf("%d",&i);
この時点で「123」と入力しても、入力が終了しません。入力を終了させるには「Enter」も押さないとなりません。
Enterを押すと入力が終了し、入力した「123[Enter]」がstdin(標準入力)に送られます。
次にscanfの%dにより、stdinから「123」が取り出され、数値に変換された後、iに代入されます。
この時、stdinには「まだ取り出されていない[Enter]」が残ったままになっています。
>printf("今あなたが入力した数字は%dです。\n",i);
>printf("続行するには何かキーを押してください!");
この時点でも、まだ[Enter]が残っています。
>getchar();
ここでgetcharを行うと「stdinに、まだ[Enter]が残っている」ので、それが取り出されます。なので、キー入力待ちはしません。
同じプログラムを書き換えて、getchar()を「4つ」にしてから、最初の入力で「123abc[Enter]」と打ってみましょう。すると、getcharでは「キー入力待ち」をしない筈です。
なぜなら、scanfが「123」しか使わずに「abc[Enter]」を残してしまう為、1つ目のgetcharには「a」が、2つ目には「b」が、3つ目には「c」が、4つ目には「[Enter]」が入力されてしまうからです。
scanfを使用したあとにgetcharを使用する場合は、getcharの直前に「[Enter]まで読み捨てる」と言う処理が必要になります。
No.4
- 回答日時:
「行単位の入力」で fgets+sscanf というのはよく見るけど, まじめに考えるとこれはこれでとても難しい処理を余儀なくされるんだよね>#1.
scanf("%d%*[^\n]\n",&i); で「最初から数字以外の文字を入力したとき」を問題にするだけなら返り値を見ればいい. もっとも, それでも本気でやると
int f;
while (f = scanf("%d", &i), scanf("%*[^\n]\n"), f == 0) {
}
のようにやっぱり面倒. これをやってくれるルーチンを作ればいいともいえるが, そういうルーチンを作るなら最後の「数字でない奴ら」を読み捨てない
int scanInt(int *p)
{
int f;
while ((f = scanf("%d", p)) == 0) {
scanf("%*[^\n]");
}
return f;
}
の方が (より scanf の仕様に近くて) いいような気がする.
No.1
- 回答日時:
はい、scanfが問題です。
行単位の入力であれば、fgets+sscanfを使うほうがよいです。
簡単に対応するなら、
scanf("%d ",&i);
と、%dの後ろにスペースを入れてみてください。
ただ、この場合、数値の後ろに余計な文字を入れてしまうとうまくいきません。
scanf("%d%*[^\n]\n",&i);
なら大丈夫かな。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ちょっと先の未来クイズ第2問
9月9日(月)に発表される「第3回子どもマネー川柳」に入賞する川柳を考えてこちらに投稿してください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
C言語でgetchar();が上手く使えずに困っています‼ void input(char *cx,
C言語・C++・C#
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
-
4
fopne で失敗する原因
C言語・C++・C#
-
5
C言語 exitの使い方
C言語・C++・C#
-
6
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
7
waitせずにキー入力があった場合のみ処理をさせたい(C言語)
C言語・C++・C#
-
8
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
9
画面を強制的に再描画させる方法
C言語・C++・C#
-
10
ループを途中で抜けたいのですが。
C言語・C++・C#
-
11
fflush(stdin)の使い方とprintf()関数getchar()関数の違いについて
C言語・C++・C#
-
12
C言語 配列の長さの上限
C言語・C++・C#
-
13
*をユーザーが入力した数字の数だけ表示するプログラムの作り方を教えてください
C言語・C++・C#
-
14
「続行するには何かキーを押して下さい・・・」
C言語・C++・C#
-
15
どんなプログラムを書いても指定されたファイルが見つかりません。と出てきます。どうやったら解決しますか
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
*をユーザーが入力した数字の数...
-
や
-
EDITコントロールで入力できる...
-
C言語scanf_sで何故か2回入力に...
-
WindowsでEOF
-
scanf関数について
-
ワードで文字を入力する時の変...
-
IF文で戻ることはできますか?...
-
Excel VBAで、Application.Inpu...
-
至急お願いします。プログラミ...
-
あるキーを押したら強制終了さ...
-
日付型のデータに変換するには!?
-
OpenCVの静止画保存のセルフタ...
-
UWSCで変数をキー入力
-
getc 等の違い
-
[WOLF RPG エディター] 音ゲー...
-
C言語 スロットみたいにするや...
-
C言語 While文(ループ)内の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
Eclipseコンソール表示を、リセ...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
cout関数を使っているのですが...
-
ワードで文字を入力する時の変...
-
VB.NETで16進数+16進数や16進...
-
scanf が無視されます
-
batプログラム上で文字列を入力...
-
入力候補を表示させるには・・・?
-
getchar()について 教えてくだ...
-
プログラミングの問題です 「金...
-
Linuxで入力待ちなしkeyread関...
-
Userformの入力順序をタブオー...
-
コマンドプロンプトからのEOFの...
-
VisualStudio2019のコードアナ...
-
WindowsでEOF
-
"gets"は危険なのでしょうか?
おすすめ情報