3

我是 C++ 的初学者,正在编写一个接受用户选择并根据它执行操作的程序……我唯一的问题是当用户输入大写选项时……程序将其视为错误选择……就像 if ' e' 是输入数字的选项。如果用户输入了“E”,程序将不会显示“输入数字”消息。我该如何解决?我尽力了,但我无法让它工作..哦,我怎样才能在 Switch case 中添加大写?这是代码的一部分,负责接受用户的选择并根据它采取行动。

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

 int main(){

 char choice ;

 for(;;){
    do{
      cout << endl ;
      cout << "(e)nter." << endl ;
      cout << "(d)isplay." << endl;
      cout << "(u)pdate." << endl ;
      cout << "(r)eset. " << endl;
      cout << "(q)uit." << endl;
      cout << endl;
      cout << "Choose one : " ;
      cin >> choice ;

      if( !strchr("edurq",choice) && (choice>=97&&choice<=122) ){
         cout << "Enter e,d,u or q " << endl;}

      else if( !strchr("EDURQ",choice) && (choice<97&&choice>122) ){
         cout << "Enter E,D,U or Q " << endl;}

    }while( !strchr("edurqEDURQ",choice) );

 switch (choice) {
     case 'e' : enter(); break ;
     case 'd' : display(); break ;
     case 'u': update() ; break ;
     case 'r' : reset() ;break;
     case 'q' : return 0;
    }

  }
} 
4

5 回答 5

8

使用 tolower 函数将您的输入转换为小写,然后您只需要担心小写选项。

于 2010-02-17T17:09:17.293 回答
5

如果您没有为匹配的 switch 语句中的 case 中断,它将继续到下一个。如果您将大写字母放在每个小写字母选项之前,它将失败。

switch (choice) {
     case 'E' :
     case 'e' : enter(); break ;
     case 'D' :
     case 'd' : display(); break ;
     case 'U' :
     case 'u': update() ; break ;
     case 'R' :
     case 'r' : reset() ;break;
     case 'Q' :
     case 'q' : return 0;
    }

另一种选择是将字符串函数应用于用户输入以将其更改为小写,在这种情况下,您现有的 switch 语句将起作用。

于 2010-02-17T17:06:26.673 回答
0

这是在案例陈述中使用失败的最佳时机。

switch (choice)
{
    case 'E':
    case 'e':
        enter();
        break;
    // etc.
}
于 2010-02-17T17:06:23.633 回答
0

大写和小写字符使用不同的字符代码。因此,如果您在 switch 中仅使用小写字母,您将只测试一种类型的案例。

您应该改进您的 switch 语句测试,如其他示例,或者将您的choice字符转换为小写。这样可以确保您为开关测试提供预期的案例。

于 2010-02-17T17:10:41.813 回答
-2

破解它

switch (choice | 0x20) {
    ...
于 2010-02-17T17:25:51.097 回答