みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Enterキーを押されたら次の処理に移るという事をしたい。

コンソールアプリケーション上で文字列を表示させた後、ユーザーがエンターキーを押したら次の文字列を表示するという仕様にしたいのですが、エンターキーだけ入力待ちにするっていうのはどのように書けばいいんでしょうか?

投稿日時 - 2007-12-12 13:49:57

QNo.3592117

暇なときに回答ください

質問者が選んだベストアンサー

#include <stdio.h>

int main(void)
{
char *str[] = {"abc", "def", "ghi", "jkl"};
int i;

for(i = 0; i < 4; i ++){
while(getchar() != '\n') ;
puts(str[i]);
}
return 0;
}

投稿日時 - 2007-12-12 16:14:10

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
  char c[2];
  printf("***>");
  do {
    fgets(c,2,stdin);
  } while ((c[0] != '\n') && (c[1] != '\n'));
  printf("+++>");
  do {
    fgets(c,2,stdin);
  } while ((c[0] != '\n') && (c[1] != '\n'));
}

エンターキー以外の文字は、fgetsを繰り返して、すべて捨てるようになっている。

以下のように繰り返し処理をしない場合、最初の1回目はうまく動くが、2回目で「素通り」する場合があり、失敗する。

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
  char c[2];
  printf("***>");
  fgets(c,2,stdin);
  printf("+++>");
  fgets(c,2,stdin);
}

素通りするのは、1回目の
***>
の表示に対し「123<エンターキー>」のように、沢山の文字を打ち込んだ時。実行してみると判るが
+++>
の次で止まらずに素通りする。

投稿日時 - 2007-12-12 14:30:00

あなたにオススメの質問