トップページ > 記事閲覧
while文の初歩的な質問です。
名前:こうすけ 日時: 2016/03/03 23:48

 おそらくととても初歩的な質問になります。 まず以下のようなプログラムを組みました。(「・・・」は省略部分です。) int WINAPI WinMain(・・・) {   while(ProcessMessage() == 0) {       Title(); } //1つめwhile DxLib_End() ; return 0 ; }   void Title(void) { while(ProcessMessage()==0) { ・         ・         ・ if(CheckHitKey( KEY_INPUT_RETURN ) == 1) { Story(); break; } } } void Story(void) { while( ProcessMessage() == 0) {    ・                ・                ・ } //2つめwhile } 以上です。 私としてはこのプログラムに、以下のような挙動を求めています。 まず始めに WinmainからTitle() を実行してもらいそのTitle()の中のwhile文でループ → エンターキーを押すと、Story()関数に入り、Title()関数から抜け出す。 ですがここで疑問が生じました。  「Title()の中でStory()を呼び出してStoryの中のWhile文でループしている間、Title()関数はまだ存続しているのか?」と。 プログラムは上から順番に実行されていると学んだので、エンターを押してStory()が呼び出されてStory()の中のWhileに入ってしまうと、Story();の記述の下の break; が実行されていないままだと思います。(伝わりづらかったらすみません) Title関数がしっかり完結しないままStory関数になっているのかなあと思い、これが何重にも重なってくるとプログラムが重くなったりしないのかなあと不安に思いました。 以上が質問になります。よろしくお願いします。
メンテ

Page: 1 |

Re: while文の初歩的な質問です。 ( No.1 )
名前:丈槍由紀 日時:2016/03/04 01:40

お察しの通り、Storyを表示している間はTitle関数で呼び出した場所で止まったままになっています 止まったままなのでループが処理されることはなく、重くなることはないのですが、このまま書き進めると後々かなり作りづらくなることが予想されます メインループ(while(ProcessMassage()))は複数作らず、main関数内の一つだけにして、ifやswitch等でループ内の処理を切り替えることをお勧めします。 #define TITLE 0 #define STORY 1 #define EXIT 2 int state; int WINAPI WinMain(・・・) {   //DXライブラリ初期化   if(DxLib_Init()!=0)return 1;      //メインループ   while(ProcessMessage() == 0)   {     if(state == TITLE)       Title();     else if(state == STORY)       Story();     else if(state == EXIT)       return;   }   DxLib_End();   return 0; } void Title() {   if(CheckHitKey( KEY_INPUT_RETURN ) == 1)     state = STORY; } void Story() { } 各関数の中はwhile文の「中身」だけを書くようにすることで、多重のループがなくなり、プログラムを把握しやすくなります stateの値を書き換えるだけで画面を移動することができるため、StoryからTitleに戻ることも簡単です
メンテ
Re: while文の初歩的な質問です。 ( No.2 )
名前:こうすけ 日時:2016/03/04 09:23

本当にありがとうございます! ずっと気になっていたことから解消されました。 これからもがんばっていきたいと思います。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存