献立決めるプログラム作成③

こんばんは。

献立決めるプログラムで前回の改善点をある程度修正できました。

#include <iostream>
#include <string>
using namespace std;

string Syusyoku(string&);

int main() {
	int buf;
	string mainmenu;
	bool mainmenuflug = false;	//主食のフラグ

	cout << "メニューを選択する画面です。" << endl;
	while (1) {
		cout << "選びたいジャンルの値を押してください。" << endl;
		if (mainmenuflug == false) {
			cout << "1:主食" << endl;
		}
		else if (mainmenuflug == true){
			cout << "1:主食  ->  " << mainmenu << endl;
		}
		cout << "2:主菜" << endl;
		cout << "3:副菜" << endl;
		cout << "4:副々菜" << endl;
		cout << "5:汁物" << endl;
		cout << "----------------" << endl;
		cin >> buf;
		if (buf != 1 && buf != 2 && buf != 3 && buf != 4 && buf !=                5) {
			cout << "1~5で再入力してください。" << endl;
		}

		switch (buf) {
		case 1:
			Syusyoku(mainmenu);
			mainmenuflug = true;
		case 2:
			//処理を加える
		case 3:
			//処理を加える
		case 4:
			//処理を加える
		case 5:
			//処理を加える
		default:
			break;
		}
	}
}

//主食の選択メニュー
string Syusyoku(string& mainmenu) {
	int buf;
	string mainmenu1 = "米";
	string mainmenu2 = "麺";
	string mainmenu3 = "パン";
	cout << "主食は何系が良いですか?" << endl;
	while (1) {
		cout << "選びたいメニューの値を押してください。" << endl;
		cout << "1:米" << endl;
		cout << "2:麺" << endl;
		cout << "3:パン" << endl;
		cout << "----------------" << endl;
		cin >> buf;
		if (buf != 1 && buf != 2 && buf != 3) {
			cout << "1~3で再入力してください。" << endl;
		}

		switch (buf) {
		case 1:
			mainmenu = mainmenu1;
			return mainmenu;
		case 2:
			mainmenu = mainmenu2;
			return mainmenu;
		case 3:
			mainmenu = mainmenu3;
			return mainmenu;
		default:
			break;
		}
	}
}

実行結果

前回の改善点としては以下でした。

  1. 繰り返し処理の書き方はif(;;)で合っているのか?
  2. 関数Syuyokuの中がきれいにならないか。
  3. 関数Syusyokuのエラー処理がない。
  4. メイン画面にてそれぞれで決めたメニューが表示されない。

この中で2.以外は解決できました。

1.繰り返し処理の書き方はif(;;)で合っているのか?
→「猫でもわかるC++プログラミング」を読み返してみたところ、無限ループはwhile(1);で実施できるとのことでしたので、そちらに修正。

3.関数Syusyokuのエラー処理がない。
→これまた「猫でもわかるC++プログラミング」のプログラム例を参考にさせてもらいました。switch文の値を入力してもらう部分で、変な値を入れると再入力を促すようにしました。

4.メイン画面にてそれぞれで決めたメニューが表示されない。
→この部分は自分なりに考えました。初期選択画面で値が選択されるとまず関数に飛んで、それぞれメニューを選ぶ。ここまでは前回と変わりませんが、関数の引数と戻り値に参照を使いました。そして関数が呼ばれるとフラグを立て、フラグが立つと関数から戻ってきた変数を初期選択画面に表示させるようにしました。

「ロベール」の赤本は内容たっぷりですごいですが、「あれ、これどうだったっけ?」と読み返してみるには少し分厚すぎるかな(笑)

「猫でも」は分厚くもないし、プログラム例が実際のアプリに近かったりするので読み返すときには参考になりますね。

そして実際に自分の頭で考えて、プログラムが思ったように動いたときはとても達成感がありますね!

ひとまず、これでなんとなく形になりそうなので、残りの処理も作っていってみます!

スポンサーリンク
広告1
広告1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

%d人のブロガーが「いいね」をつけました。