ここから本文です

解決済みの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)最終的にエンターが押されているので次の処理に進んでしまう。→最初の文字がエンターでない以上、偽にしたい。

また、もっと効率的できれいな書き方があれば教えて下さい。

違反報告

ベストアンサーに選ばれた回答

pyon_naniwa2001さん

#include <stdio.h>

int main(void)
{
puts("エンターキーを押して下さい。");
while(getchar() != '\n'){
puts("エンターキーを押してってば!");
while(getchar() != '\n') ;
}
return 0;
}

  • 回答日時:2008/8/29 05:52:18

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

  • 出来ました。jariten_catdさん、pyon_naniwa2001さんご回答有り難うございました。
  • コメント日時:2008/8/29 07:18:59

グレード

このQ&Aはまだナイス!されていません。
役に立ったと思った回答に、ナイス!してみよう!

ベストアンサー以外の回答

(1件中1〜1件)

 

jariten_catさん

処理系依存になっちゃいます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 気に入った書き方
Yahoo!知恵袋のQ&Aアプリが登場! さくさく検索、かんたんに質問や回答ができる! Yahoo!知恵袋アプリ

トピックスにまつわるQ&A

月給はなぜ上がりにくいのか
月給」に関するQ&A
ベッカム、ピッチに涙の別れ
ベッカム (ピッチ 別れ)」に関するQ&A

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する