質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.35%

コンソール上でprintfで表示してる擬似画面間の遷移をしたい

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,245

Tropicom

score 10

前提・実現したいこと

 はじめまして。初めて書き込みいたします。
初めてのC言語で頭がパンクしているので力をお借りしたいです。

 現在、Eclipseで特定のキーが押されたらprintfで表示している1個目の擬似画面から2個目の擬似画面に遷移するというアプリケーションを作りたいと思っているのですが、キーが押されて2個目の擬似画面が出た際どうやって最初に戻ればいいか悩んでいます。
 分かりづらい文章、ソースコードだとは思いますが、ご協力お願いいたします。サンプルコード等書き込んで頂ければ尚ありがたいです。

該当のソースコード

include <stdio.h>

int main(void)
{
    char key;

    while(1)
    {
        printf("==================\n"
               "|"
               "|1番目の画面です
               "|"
               "==================");
        scanf("%c", &key);//aキーが入力されたら2番目の画面を表示する

        switch(key)
        {
            case 'a':
            printf("==================\n"
                     "|"
                     "|2番目の画面です
                     "|"
                     "==================");
            scanf("%c", &key);//bキーが入力されたら1番目の画面を表示する
            break;

           case 'z':
           printf("==================\n"
                     "|"
                     "|終了します
                     "|"
                     "==================");
            scanf("%c", &key);//zキーが入力されたらアプリを終了する
        }

    }
    return(0);
}    

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+3

初めてのプログラミングでしょうか。
3番目の画面を追加したら?4番目の画面を追加したら?
ループやらswitch文の入れ子入れ子でいずれ破たんしますね。
実際のコードは書きませんが、処理としては下記のような感じにすると良いのではと思います。

main()
{
  画面変数 = 1;
  while(1){
    switch(画面変数){
       case 1:
           画面1表示処理;
           break;
       case 2:
           画面1表示処理;
           break;
    }
    入力処理
    switch(キー){
       case 'a':
         画面変数 = 2;
         break;
       case 'b':
         画面変数 = 1;
         break;
       case 'z':
         画面変数 = 0;
         break;
     }
     if(画面変数 == 0) break;
  }
}


入力キーごとの処理は、画面ごとに用意しないとダメですけど、作り方の参考にしてみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

エスケープシーケンス(C言語で用いられているのとは別の意味)を使うと、コンソールを制御可能です。
参考URL: https://www.grapecity.com/tools/support/powernews/column/clang/047/page02.htm

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

僕ならデータ駆動にします。

画面の
 - 名前
 - 表示内容
 - (入力文字 と 遷移画面の名前 の組) をN個

を構造体(の列)に並べ、実際の動作はこのデータを舐めてそれぞれに応じた処理をする。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

各画面に番号を振って、入力KEYを列、現在表示している画面番号を行としたテーブルを作ります。
各セルに「表示画面:押されたKEY」に対してどの画面番号を表示するかを記入します。
遷移先が無い(画面を変える必要がない)場合、表示している画面番号を記入します。

出来上がった表に基づき、二次元配列を作ります。

mainのループは以下を行うようにすると、ご希望の機能が実現できるのではないかと思います。
・キーを読み込む(scanf)
・二次元配列を参照する(table[gamenNo][key])
・得られた値に対応する画面を表示する

AndroidやらiOSのGUI作成がどんどん自動化されて、最近はあまりみなくなりましたが、
作ったテーブルのことを「画面遷移表」などといいます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る