Какой код должен быть написан для принятия выбора в нижнем и верхнем регистре? - PullRequest
3 голосов
/ 17 февраля 2010

Я новичок в c ++ и пишу программу, которая принимает выбор пользователя и действует в соответствии с ним ... моя единственная проблема - когда пользователь вводит выбор в верхнем регистре ... программа воспринимает это как неправильный выбор ... например, если 'e' было выбрано для ввода номера .. если пользователь ввел 'E', программа не отобразит сообщение "введите номер" .. как я могу это исправить? Я старался изо всех сил, но я не могу заставить его работать .. О, и как я могу добавить заглавные буквы в случаях Switch? Это часть кода, которая отвечает за выбор пользователя и действует в соответствии с ним.

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

  }
} 

Ответы [ 5 ]

8 голосов
/ 17 февраля 2010

Используйте функцию tolower для преобразования вашего ввода в нижний регистр, и тогда вам нужно будет только беспокоиться о параметрах нижнего регистра.

5 голосов
/ 17 февраля 2010

Если вы не разберетесь с регистром в соответствующем операторе 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 будет работать.

0 голосов
/ 17 февраля 2010

взломать

switch (choice | 0x20) {
    ...
0 голосов
/ 17 февраля 2010

Прописные и строчные буквы используют разные коды символов. Таким образом, если вы используете только строчные буквы в своем коммутаторе, вы будете тестировать только один тип регистра.

Вам следует либо улучшить свои тесты операторов switch, как это показано на других примерах, либо преобразовать ваш символ choice в строчные буквы. Таким образом, убедитесь, что вы предоставляете ожидаемый случай для ваших испытаний коммутатора.

0 голосов
/ 17 февраля 2010

Это идеальное время для использования падежных операторов.

switch (choice)
{
    case 'E':
    case 'e':
        enter();
        break;
    // etc.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...