解決済みのQ&A
C言語で書き方がわかりません。
voewfyさん
C言語で書き方がわかりません。
(1)「エンターキーを押してゲームを開始して下さい。」とコンソールにメッセージを表示させ、コンソールから文字の入力を促す。
(2)入力された文字がエンターであるか否かを判定し、真であれば次の処理に進む。もし偽である場合(エンター以外の文字が入力された場合)には「エンターキーを押してってば!」とメッセージを表示させ、再度文字の入力を促す。
(3)エンターが押されるまで(2)を繰り返す。
という簡単なコードを書きたいのですが、以下のように書くと期待と異なる動作になります。どのように修正すればよいでしょうか。
for(int i=0; ; i++){
char ent;
if(i==0){
printf("エンターキーを押してゲームを開始して下さい。");
}
else{
printf("エンターキーを押してってば!");
}
scanf("%c", &ent);
if(ent=='\n') break;
}
期待と違う箇所;
何文字入力しようとも、最初の一文字のみを判定させたいのに、入力した文字を全て判定してしまうため、「abc(enter)」と押すと(1)三回「エンターキーを押してってば!」と表示してしまう。→一回の表示にしたい。(2)最終的にエンターが押されているので次の処理に進んでしまう。→最初の文字がエンターでない以上、偽にしたい。
また、もっと効率的できれいな書き方があれば教えて下さい。
-
- 質問日時:
- 2008/8/29 05:23:29
-
- 解決日時:
- 2008/8/29 07:18:59
-
- 回答数:
- 2
-
- お礼:
- 知恵コイン
- 50枚
-
- 閲覧数:
- 4,618
-
- ソーシャルブックマークへ投稿:
- Yahoo!ブックマークへ投稿
- はてなブックマークへ投稿
- (ソーシャルブックマークとは)
ベストアンサーに選ばれた回答
#include <stdio.h>
int main(void)
{
puts("エンターキーを押して下さい。");
while(getchar() != '\n'){
puts("エンターキーを押してってば!");
while(getchar() != '\n') ;
}
return 0;
}
- 回答日時:2008/8/29 05:52:18
このQ&Aはまだナイス!されていません。
役に立ったと思った回答に、ナイス!してみよう!
ベストアンサー以外の回答
(1件中1〜1件)
処理系依存になっちゃいますg、fflushを使って2文字目以降を読み捨てるのはどうでしょう。
こんな感じ?
scanf("%c", &ent); fflush(stdin);
- 回答日時:2008/8/29 06:00:01
あなたにおすすめの解決済みの質問
- C言語の質問です。どうかご教授お願いします。住所録のプログラムをつくったのですが・・・以下プログラ...
- 初歩的なC言語の質問なのですが、なぜか、「scanf("%c",&z);」が動いてくれません。なぜでしょうか?#in...
- 急いでいます。 C言語で以下の課題)のプログラムのソースがわからないもで教えてください。 自身でソー...
あなたにおすすめの知恵ノート
- Perl Hash 気に入った書き方
- Perl Hash 気に入った書き方

質問した人からのコメント