在这段代码中,在a或b的一部分被制作后,菜单会出现两次,我如何防止这种情况发生?我怀疑它与cin.get有关,可能从第一个cout语句捕获空间。如果是这种情况,那么解决方案将会消耗这个空间。我知道getline适用于字符串,但是这是一个char数据类型。也是一个快速相关的问题,是否有一段代码,像getline(cin < < ws,stringName)对字符串,但对于char数据类型?如何防止开关功能中的菜单重复自身?
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
void displayMenu();
int main()
{
char cSelection;
string sSelection;
//Create menu
const char OPTION_READING = 'A', OPTION_READINGTWO = 'B', OPTION_ENDING = 'C';
do
{
displayMenu();
cout << "\nPlease choose an option" << endl << endl;
cin.get(cSelection);
//respond to choice
switch (cSelection)
{
case OPTION_READING:
case 'a':
cout << "You picked 1" << endl;
break;
case OPTION_READINGTWO:
case 'b':
cout << "You picked 2" << endl;
break;
case OPTION_ENDING:
case 'c':
cout << "Thank you for using this program!";
return 0;
default:
cout << cSelection << " " << "is an invalid choice";
}
} while (toupper(sSelection[0] != OPTION_ENDING));
}
void displayMenu()
{
cout << "\t \t \t" "Menu" << endl << endl;
cout << "A. Option 1\n";
cout << "B. Option 2\n";
cout << "C. Quit program";
}
它不是'cout'中的空间。它与您的菜单选择字符一起输入的换行符。以一种或另一种方式消费换行符。 – WhozCraig 2014-10-07 08:33:38