アプリ版:「スタンプのみでお礼する」機能のリリースについて

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'を代入しています。

実行されない原因と改善策を教えて下さい‼

A 回答 (3件)

ついでに指摘しておくと for の必然性がわからない.



x = *cx-'0';
のように書かないのはなぜだろうか.
    • good
    • 1
この回答へのお礼

学校の課題で出たものを勝手に発展させているだけで、そこは課題として与えられたときにこうやって値を得なさいと定められているので私にも分かりません。

お礼日時:2016/12/16 15:14

ついでに言うと、


printf("x=")
のあとで
*cx = getchar();
がキー入力待ちになって見えるのは、たまたまこの時点で標準入力が空だからです。

例えば 432(エンター) と入力したなら、標準入力には
「4」 「3」「2」 「改行」
の4文字が入力され、
*cx = getchar(); で 「4」
*cy = getchar(); で(キー入力待ちにはならずに) 「3」
次に inputが呼ばれたときの
*cx = getchar(); で(キー入力待ちにはならずに) 「2」
*cy = getchar(); で(キー入力待ちにはならずに) 「改行」
となります。
    • good
    • 0
この回答へのお礼

助かりました

分かりやすい説明ありがとうございます‼
getchar();の後に空読みのプログラムをいれたら上手く行きました‼
ありがとうございました‼

お礼日時:2016/12/16 15:45

getchar()は標準入力から1文字読み出します。


この「1文字」は、空白、改行等の「文字」には見えないものも含みます。

よくある環境では、標準入力は特に指定しなければ端末になっています。
端末では、キーボードからの入力を、エンターを入力した時点でまとめて送るようになっています。

 端末に
x=
 と表示されたときに
3
 だけキー入力しても、標準入力へは送られません。その後に
(エンター)
 とキー入力した時点で、標準入力に
「3」 「改行」
 という「2文字」が送られます。
*cx = getchar();
 は、このうち 「3」 だけを読みます。
*cy = getchar();
 では、残ってる「改行」を読みます。


何がしたいのかがこのプログラムの意図は読み取れないのですが、設計を根本から見直す必要があると思われます。
※ inputを呼び出す側が欲しいのは、入力された文字(cx,cy)ではなく、その結果(x,y)の方だろうし
    • good
    • 0
この回答へのお礼

ありがとう

なるほど!
二つに分ければ*cyでも入力が新たに行われるかと思ったのですが、そうはいかないんですね。

プログラムは長いので関係のない部分は省いています‼

お礼日時:2016/12/16 06:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています