2012-02-09 3 views
1

У меня есть 1d массив правильных ответов, но они хранятся как верхний регистр в txt-файле. Я хочу принять вход пользователя, но если он ответит в нижнем регистре, я хочу, чтобы программа принимала его ответ как нижний или верхний регистр. я на правильном пути? также, мой тест, если его действительный ответ (a-d или A-D) не работал .. есть ли что-то еще, что я мог бы попробовать?C++: распознавание нижнего регистра как правильное, если оно хранится как верхний регистр?

char answers[x]; 
cin >> user_guess; 

while (user_guess != "a" || "b" || "c" || "d" || "A" || "B" || "C" || "D") //doesnt work? 
{ 
cout<< "Please correctly identify your answer." << endl; 
cin >> user_guess; 
} 

if (islower (user_guess)) 
{ 
toupper (user_guess)) 
} 
if (user_guess != answers[x]) 
{ 
cout << "incorrect! << endl; 
} 
else 
{ 
cout << "correct!" << endl; 
} 

ответ

2

Ваш тест для правильного выбора не работает, потому что это не так, как || работы. Что вам нужно, это что-то вроде:

while (user_guess != "a" && user_guess != "b" && user_guess != "c" && user_guess != "d" 
     user_guess != "A" && user_guess != "B" && user_guess != "C" && user_guess != "D") { 

Кроме того, нет никакого вреда в призыве toupper() на то, что это не нижний регистр символов. Таким образом, вы можете просто сделать:

if (toupper(user_guess) != answers[x]) { 

Если преобразовать user_guess в верхнем регистре сразу после чтения его из cin, то вы можете как сократить «правильный угадать» тест (имея только испытать против прописных ответов) , и опустить toupper() из теста против answers[x].

+0

эй спасибо, плохо попробуйте это. Весьма признателен! – gamergirl22

+0

Предложение - после преобразования 'user_guess' в верхний регистр выполните проверку диапазона вместо сравнения с каждой отдельной буквой:' while (! (User_guess> = 'A' && user_guess <= 'D')) ' – tom

+0

IMO лучше конвертировать в в нижнем регистре с использованием 'tolower', а затем' switch' на результат с четырьмя метками – demorge

Смежные вопросы