C ++如何使用数字和字母选择实现菜单

时间:2015-04-17 17:29:08

标签: c++ input menu char int

我想在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

3 个答案:

答案 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。