Cpp-Primer-Plus-6th icon indicating copy to clipboard operation
Cpp-Primer-Plus-6th copied to clipboard

编程题解6.4似乎不对

Open WangZhiqiang-academia opened this issue 2 years ago • 2 comments

题目上说d. display by preference不是显示成员的偏好,而是preference为0 1 2时分别显示fullname title bopname

WangZhiqiang-academia avatar Apr 17 '22 12:04 WangZhiqiang-academia

题目上说d. display by preference不是显示成员的偏好,而是preference为0 1 2时分别显示fullname title bopname

是的,作者写错了

Omnitrix-t avatar Feb 26 '23 09:02 Omnitrix-t

如果愿意的话,可以看看我写的

#include <iostream>

int main()
{
	using namespace std;

	const size_t strsize = 30;
	const size_t bop_num = 3;

	struct bop {
		char fullname[strsize]; // real name
		char title[strsize];    // job title
		char bopname[strsize];  // secret BOP name
		int preference;         // 0 = fullname, 1 = title, 2 = bopname
	};

	bop bops[bop_num] = {
		{"real name 1", "job title 1", "BOP name 1", 0},
		{"real name 2", "job title 2", "BOP name 2", 1},
		{"real name 3", "job title 3", "BOP name 3", 2},
	};

	//第一行提示语句
	cout << "Benevolent order of Programmers report.\n";

	//菜单
	cout << "a.display by name     b.display by title\n";
	cout << "c.display by bopname  d.display by preference\n";
	cout << "q.quit\n";

	char choice = '\0';
	int preference = 0;	//要显示的内容

	cout << "Enter your choices: ";

	while (cin >> choice)
	{
		//退出
		if ('q' == choice)
			break;

		//指定要显示的内容
		switch (choice)
		{
		case 'a':
			preference = 0;
			break;
		case 'b':
			preference = 1;
			break;
		case 'c':
			preference = 2;
			break;
		}

		for (size_t i = 0; i < bop_num; i++)
		{
			//选项 d 为特殊条件
			if ('d' == choice)
			{
				preference = bops[i].preference;
			}

			//显示内容
			switch (preference)
			{
			case 0:
				cout << bops[i].fullname << endl;
				break;
			case 1:
				cout << bops[i].title << endl;
				break;
			case 2:
				cout << bops[i].bopname << endl;
				break;
			}
		}

		cout << "Next choice:";
	}

	cout << "Bye!";

	return 0;
}

Omnitrix-t avatar Feb 26 '23 09:02 Omnitrix-t