2010-02-17 50 views
3

我是初学者到C++和编写一个程序,接受用户的选择,并根据它行事......我唯一的问题是,当用户输入大写选择...该程序将其视为一个错误的选择...像如果'e'是输入数字的选择..如果用户输入'E',程序将不会显示“输入数字”消息..我可以修复它吗?我尽我所能,但我无法得到它的工作..哦,我怎么能在开关案件中添加大写字母? 这是代码的一部分,负责根据用户的选择采取行动。应该写什么代码才能接受大写和小写选择?

#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; 
    } 

    } 
} 
+0

',和strchr( “EDURQ”,选择)&&(选择<97&&choice> 122)'!没有什么能既'<97' and '> 122',是不是多余的用'strchr'通话无论如何? – 2010-02-17 18:32:38

回答

5

如果您在switch语句中没有找到匹配它的案例,将继续到下一个案例。如果您在每个小写选择之前放置资本案例,它将会失败。

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语句会工作。

+4

这很愚蠢,因为你需要输入一切两次。为什么不使用tolower呢? – 2010-02-17 18:11:04

+1

他也指出了这一点。 – rafael 2010-02-17 19:44:05

0

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

switch (choice) 
{ 
    case 'E': 
    case 'e': 
     enter(); 
     break; 
    // etc. 
} 
8

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

0

大写和小写字符使用不同字符代码。因此,如果您在交换机中只使用小写字母的情况下,您将只测试一种类型的情况。

您应该改进switch语句测试,如其他示例所示,或将choice字符转换为小写字母。通过这种方式确保您为交换机测试提供预期的情况。

-2

哈克它

switch (choice | 0x20) { 
    ... 
+1

哦,请......为什么你不使用一个适当的功能:(? – 2010-02-17 18:30:25

+0

我是“黑客”:-)) – wqw 2010-02-17 18:50:59