ここから本文です

解決済みの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
  • 閲覧数:
    6,505
    回答数:
    2
  • お礼:
    知恵コイン
    50枚

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

pyon_naniwa2001さん

#include <stdio.h>

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

質問した人からのお礼

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

グレード

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

(1件中1〜1件)

 

jariten_catさん

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

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

総合Q&Aランキング

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

知恵コレに追加する

閉じる

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

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