ページ 11

任意の入力を受けたらプログラムの最初に戻らせる方法

Posted: 2009年12月29日(火) 01:58
by kerotan0820
タイトルが大変分かりにくくて申し訳ありません

今分かるC言語の範囲で出来るだけの計算ソフトを作ってみているのですが、任意の処理をした後にソフトが終了してしまうのを止めさせ、一番最初の状態に初期化する方法が分かりません

プログラムは添付しておきました


プログラムを見ていただければ分かると思うのですが、
1を入力したら○○ 2を入力したら○○ 3を入力したら○○
と最初にif文を使って分岐させ、こちらからの入力にしたがってその数値を計算して結果を表示するだけのプログラムです。

このプログラムの場合、最終的に結果が表示されてそのまま何か入力するとソフトが強制終了されてしまいます。


そうではなく、何かの入力をしたら最初の中間なのか期末なのかなどの選択画面に戻るようにしたいのです。

それは可能なのでしょうか


今一番最近で知ったのがfor文というものなのですが、これを使っても出来る気がしないし…

if文を用いれば○○という入力を受けたら○○というプログラムを実行。それ以外の場合○○を実行という指示を最後に付け加えることが可能ですが、その場合性格には最初に戻るのではなく新しいプログラムを実行しているような形になってしまいます。

説明がしにくいのですが、お分かりいただけるでしょうか;

1~5の作業を行ったのちに6~11の作業(1~5と6~11は同じ内容)を行うのではなく
1~5の作業を行ったら1に戻りまた同じ処理を行うということがしたいです。


回答のほうよろしくお願いします^^

Re:任意の入力を受けたらプログラムの最初に戻らせる方法

Posted: 2009年12月29日(火) 03:51
by pooka
while文は知っているでしょうか?
知らない場合は
http://homepage3.nifty.com/mmgames/c_guide/10-01.html
などを参考に調べてみてください。


#include&#160;<stdio.h>

int&#160;main(void)
{
&#160;&#160;&#160;&#160;int&#160;flag&#160;=&#160;1;
&#160;&#160;&#160;&#160;int&#160;state&#160;=&#160;0;

&#160;&#160;&#160;&#160;while(flag)
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(state&#160;==&#160;0)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf("数値を入力してください\n");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf("中間:1\t期末:2\t終了:3\n\n");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;scanf("%d",&#160;&state);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if(state&#160;==&#160;1)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf("\n中間の処理\n\n");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;state&#160;=&#160;0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if(state&#160;==&#160;2)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf("\n期末の処理\n\n");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;state&#160;=&#160;0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if(state&#160;==&#160;3)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf("\n終了します\n");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;flag&#160;=&#160;0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf("\n入力エラーです\n\n");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;state&#160;=&#160;0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;return&#160;0;
}

上記ではflagという変数を用いてwhile文から抜けるかどうかを判定しています。
これで3と入力しないかぎり繰り返されます。
あと処理をわかりやすくするために、実際の計算やエラー処理などは書いていません。

またswitch文を使ったり、中間、期末などのそれぞれの処理を関数化したりすることで、
各処理を追いやすくなるかなぁと思います。

Re:任意の入力を受けたらプログラムの最初に戻らせる方法

Posted: 2009年12月29日(火) 04:05
by kerotan0820
■pooka様
While文というものを聞いたことはありましたがまだ習得はしていません;

説明を読んでこの単元を使えば僕の目的が果たせることが分かりましたので、時期にWhile文を覚えてチャレンジしたいと思います

詳しい解説ありがとうございました^^

Re:任意の入力を受けたらプログラムの最初に戻らせる方法

Posted: 2009年12月29日(火) 08:20
by Naohiro19
pookaさん>
else if(state == 3) 
        { 
            printf("\n終了します\n"); 
            flag = 0; 
        }
の文だと無限ループになっちゃいますね。

Re:任意の入力を受けたらプログラムの最初に戻らせる方法

Posted: 2009年12月29日(火) 12:06
by えーや
>Naohiro19さん
else if(state == 3) 
        { 
           printf("\n終了します\n"); 
            flag = 0; 
        }
では無限ループにならないですね。
while(flag) が条件ですので、おそらく flag = 0 を state = 0 と勘違いなされたのかな?
揚げ足をとるようで申し訳ないのですが質問者さんが混乱しないようにここに書かせてもらいました。