エンターで処理を進める方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
OG2_A
記事: 2
登録日時: 3ヶ月前

エンターで処理を進める方法

#1

投稿記事 by OG2_A » 3ヶ月前

[1] 質問文
現在、大学の課題でc言語を用いた簡単なゲームを作成しています。最終的には同じ講義を受けている人同士で互いのゲームをプレイすることになっています。

私のゲームでは文章の出力のため、一定数のprintf()だけの関数を作り、その関数をmainで呼び出しています。しかし、そのままだときりの良いところで止めることができず、開業が多い文章を表示すると見づらくなってしまいます。そこでノベルゲームのように[文章を表示→エンターを押す→続きの文章を表示]といった一連の流れの処理を行いたいのです。

getchar()を使えば入力待ちを利用してエンターを押すまで文章の表示を待機させることができるのは調べてわかり、一連の流れのように実行することができました。しかし、エンターを押して進める際に何か文字が入っていると同じ関数内の2回目以降のgetchar()で入力待ちが発生せず、そのまま表示が流れてしまいました。エンターの際に文字を入力しなければよいだけなのですが、ほかの人にもプレイしてもらう関係上、可能な限りこういった想定外の動作は減らしたいのです。どのようにプログラムを組めばよいでしょうか?

 [1.1] 自分が今行いたい事は何か
 getchar()を使い、関数内のprintfで出力される文章を
 [文章を一定行表示→エンターを押す→続きの文章を表示]
 を一連の流れとして複数回行う。

 [1.2] どのように取り組んだか(プログラムコードがある場合記載)

コード:

#include <stdio.h>
void print();
char c;

int main() {
  print();
  printf("END\n");
  return 0;
}

void print() {
  printf("1行目\n");
  c = getchar();
  printf("2行目\n");
  c = getchar();
  printf("3行目\n");
  c = getchar();
  printf("4行目\n");
  c = getchar();
}
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
 エンター入力の際、誤って文字が入っているとそれ以降のgetchar()で入力待ちが発生しない。

 [1.4] 今何がわからないのか、知りたいのか
 誤って文字が入っていても以降のgetchar()で文章の表示を止める。

[2] 環境  
 [2.1] OS : wsl
 [2.2] コンパイラ名 : gcc

アバター
みけCAT
記事: 6392
登録日時: 10年前
住所: 千葉県
連絡を取る:

Re: エンターで処理を進める方法

#2

投稿記事 by みけCAT » 3ヶ月前

エンター(改行文字)が入力されるまで次に進まないようにすればいいでしょう。

コード:

#include <stdio.h>
#include <stdlib.h> /* exit()用 */

void wait_enter(void) {
  int c;
  while ((c = getchar()) != '\n') {
    if (c == EOF) {
      puts("bye!");
      exit(1);
    }
  }
}

void print();
char c;

int main() {
  print();
  printf("END\n");
  return 0;
}

void print() {
  printf("1行目\n");
  wait_enter();
  printf("2行目\n");
  wait_enter();
  printf("3行目\n");
  wait_enter();
  printf("4行目\n");
  wait_enter();
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

OG2_A
記事: 2
登録日時: 3ヶ月前

Re: エンターで処理を進める方法

#3

投稿記事 by OG2_A » 3ヶ月前

返信ありがとうございます!
提示してくれたプログラムを利用することで問題を解消することができました!
単純に知識不足で思いつくことができなかったみたいなので、もっと勉学に励みたいと思います!
みけCAT さんが書きました:
3ヶ月前
エンター(改行文字)が入力されるまで次に進まないようにすればいいでしょう。

コード:

#include <stdio.h>
#include <stdlib.h> /* exit()用 */

void wait_enter(void) {
  int c;
  while ((c = getchar()) != '\n') {
    if (c == EOF) {
      puts("bye!");
      exit(1);
    }
  }
}

void print();
char c;

int main() {
  print();
  printf("END\n");
  return 0;
}

void print() {
  printf("1行目\n");
  wait_enter();
  printf("2行目\n");
  wait_enter();
  printf("3行目\n");
  wait_enter();
  printf("4行目\n");
  wait_enter();
}

返信

“C言語何でも質問掲示板” へ戻る