ここから本文です

C言語で書き方がわかりません。

このエントリーをはてなブックマークに追加

質問者

voewfyさん

2008/8/2905:23:29

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

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

閲覧数:
7,202
回答数:
2
お礼:
50枚

違反報告

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

2008/8/2905:52:18

#include <stdio.h>

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

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

2008/8/29 07:18:59

出来ました。jariten_catdさん、pyon_naniwa2001さんご回答有り難うございました。

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル
  • このエントリーをはてなブックマークに追加
簡単にみんなで作るショート動画アプリ Yahoo!Chocotle for Android(無料)
ベストアンサー以外の回答
1〜1件/1件中

jariten_catさん

2008/8/2906:00:01

処理系依存になっちゃいますg、fflushを使って2文字目以降を読み捨てるのはどうでしょう。
こんな感じ?
scanf("%c", &ent); fflush(stdin);

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

ID/ニックネームを選択し、「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

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