
C言語でgetchar();が上手く使えずに困っています‼
void input(char *cx, char *cy){
int i,x,y;
printf("x=");
*cx = getchar();
if(*cx != 'q'){
for(i = 0; i < 5; i++)
if(*cx == '0' + i)x = i;
}
printf("¥ny=");
*cy = getchar();
if(*cy != 'q'){
for(i = 0; i < 5; i++)
if(*cy == '5' + i)y = i;
}
}
という関数で、一度目は上手く行くのですが、二度目の実行で*cy = getchar();が行われません。
cx,cyは、関数を呼び出す前に'9'を代入しています。
実行されない原因と改善策を教えて下さい‼
No.2ベストアンサー
- 回答日時:
ついでに言うと、
printf("x=")
のあとで
*cx = getchar();
がキー入力待ちになって見えるのは、たまたまこの時点で標準入力が空だからです。
例えば 432(エンター) と入力したなら、標準入力には
「4」 「3」「2」 「改行」
の4文字が入力され、
*cx = getchar(); で 「4」
*cy = getchar(); で(キー入力待ちにはならずに) 「3」
次に inputが呼ばれたときの
*cx = getchar(); で(キー入力待ちにはならずに) 「2」
*cy = getchar(); で(キー入力待ちにはならずに) 「改行」
となります。
分かりやすい説明ありがとうございます‼
getchar();の後に空読みのプログラムをいれたら上手く行きました‼
ありがとうございました‼
No.3
- 回答日時:
ついでに指摘しておくと for の必然性がわからない.
x = *cx-'0';
のように書かないのはなぜだろうか.
学校の課題で出たものを勝手に発展させているだけで、そこは課題として与えられたときにこうやって値を得なさいと定められているので私にも分かりません。
No.1
- 回答日時:
getchar()は標準入力から1文字読み出します。
この「1文字」は、空白、改行等の「文字」には見えないものも含みます。
よくある環境では、標準入力は特に指定しなければ端末になっています。
端末では、キーボードからの入力を、エンターを入力した時点でまとめて送るようになっています。
端末に
x=
と表示されたときに
3
だけキー入力しても、標準入力へは送られません。その後に
(エンター)
とキー入力した時点で、標準入力に
「3」 「改行」
という「2文字」が送られます。
*cx = getchar();
は、このうち 「3」 だけを読みます。
*cy = getchar();
では、残ってる「改行」を読みます。
何がしたいのかがこのプログラムの意図は読み取れないのですが、設計を根本から見直す必要があると思われます。
※ inputを呼び出す側が欲しいのは、入力された文字(cx,cy)ではなく、その結果(x,y)の方だろうし
なるほど!
二つに分ければ*cyでも入力が新たに行われるかと思ったのですが、そうはいかないんですね。
プログラムは長いので関係のない部分は省いています‼
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
C言語 1文字入力(Enterキーなし)
C言語・C++・C#
-
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
-
4
関数から配列を返すには?
C言語・C++・C#
-
5
C言語で今まで表示していた画面の消すには?
C言語・C++・C#
-
6
C言語 While文(ループ)内の文字入力
C言語・C++・C#
-
7
getchar()について 教えてください。
C言語・C++・C#
-
8
プログラムについての質問です。 fflush(stdout)はいったいどのような時に使われているので
C言語・C++・C#
-
9
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見る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回入力に...
おすすめ情報