我想在C ++中使用一个菜单,它有字母和数字两种选项。例如,输出可能是:
========================
(1) Do something
(2) Do something
(a) Do something
(b) Do something
========================
是否有一种方法可以测试用户输入以确定它是char还是int并相应地处理它?</ p>
如果我使用:
int choice;
cin >> choice;
用户输入一个char,当然cin会返回错误。我正在寻找一种简单的方法来测试数字或字符的用户输入,并让程序根据该决定做出不同的反应。
[UPDATE]
我找到了我想要的答案。我是这样做的:
string choice;
cout << "Your choice: ";
cin >> choice;
if( isdigit(choice[0]) )
{
theInt = stoi(wChoice);
// do something with int
}
else if( choice[0] = 'a' )
// do menu option a
答案 0 :(得分:1)
您最好使用isdigit
中的方法ctype.h
检查字符是否为十进制数字字符,并使用方法isalpha
检查字符是否为字母。< / p>
答案 1 :(得分:0)
“例如,可能有选项:1,2,3,n,s。”
我看到的最简单的解决方案是使用菜单选择代码,如
char choice;
std::cin >> choice;
switch(choice) {
case `1`:
// Do menu option one
break;
case `2`:
// Do menu option two
break;
case `3`:
// Do menu option three
break;
case `n`:
// Do menu option "n"
break;
case `s`:
// Do menu option "s"
break;
}
如果您需要处理大于9
的数字选项,则只需使用std::string
作为输入字段:
std::string choice; // <<<
std::cin >> choice;
反过来switch
语句不能再使用了,您必须将其更改为if/else if/else
级联:
if(choice == "1") {
// Do menu option one
}
else if(choice == "2") {
// Do menu option two
}
// ...
else if(choice == "42") {
// Do menu option fortytwo
}
else if(choice == "n") {
// Do menu option "n"
}
else if(choice == "s") {
// Do menu option "s"
}
答案 2 :(得分:-1)
为此,您需要将输入作为字符串读入,然后解析它以查看它是字母字符还是数字字符串。根据这一点(警告,我主要是一个C程序员,所以使用C字符串而不是真正的字符串):
#define INPUT_SIZE 8
char input[INPUT_SIZE]; // change size as appropriate
cin.getline(input, INPUT_SIZE);
if (cin.good())
if(input[0] >= '0' && input[0] <= '9') {
int value = atoi(input);
} else if(input[0] >= 'a' && input[0] <= 'z') {
char value = input;
}
}
当然,值需要不同的名称和实际的代码路径来处理它们,特别是因为C ++没有我所知道的好的内置“任何一种”类型。
或者,只需将所有数字视为一个字符,假设所有数字选项都是单个字符,并测试为“0”而不是0。