2013-08-27 5 views
0

Когда пользователь нажимает Q, он не выходит из программы. Что случилось? Помогите пожалуйстаКак выйти, если пользователь вводит q

while (true) 
{ 
//promt to user enter or quit 
cout<<" Enter five digit number please or Q to quit \n"; 
cin>> buf; n = atoi (buf.c_str()); 
cin.ignore(1000,10); 

if(n == 'q' || n == 'Q') 
    break; 

a = n % 10; 
b = n/10000; 

if (! a == b) 
    { 
    cout<< "This is not a palindrome \n"; 
    continue; 
    } 
// checking the palindrome 
n = n % 10; 
n = n/100; 

if (a == b) 
    cout<<" This is palindrome\n"; 
else 
    cout<<" This is not a palindrome\n"; 

} 

ответ

0

Если ввести q или Q к этой программе, он не будет ничего конвертировать в atoi и n будет 0, не 'q' или 'Q'. Программа выйдет, если вы вводите числовое значение для 'q' или 'Q' в свой набор символов, хотя (113 или 81, соответственно).

Пример:

Enter five digit number please or Q to quit 
12345 
This is not a palindrome 
Enter five digit number please or Q to quit 
12321 
This is palindrome 
Enter five digit number please or Q to quit 
q 
This is palindrome 
Enter five digit number please or Q to quit 
113 

Я оставлю дальнейшую отладку/крепление к вам. Примечание. Ваша программа неправильно проверяет наличие палиндромов.

1

, если вы введете символ «q», функция atoi не может интерпретировать этот вход как число, так что возвращается ноль. Пожалуйста, обратитесь к этой ссылке

http://www.cplusplus.com/reference/cstdlib/atoi/

Наиболее важным является следующий пункт:

Если первая последовательность непробельных символов ул не является допустимым целым числом, или, если нет такой последовательность существует потому, что либо str пуст, либо содержит только пробельные символы, преобразование не выполняется и возвращается ноль.

В этом случае ул == ЬиЕ

0

Как указано в предыдущих ответах, д будет преобразована в 0 с atoi(). Таким образом, в основном, для того, чтобы программа, чтобы бросить курить с помощью водного или Q, используйте преобразование atoi() после

if(n == 'q' || n == 'Q') 
    break; 

Таким образом, п все равно будет д или Q, когда вы проверяете, если программа должна бросить курить, и Если нет, вы затем преобразуете n в целое число с atoi() и проверьте, является ли это палиндром.

Надежда Я мог бы помочь

+0

Вы имеете в виду вот так: – Aysin

+0

if (n ==' 1 '|| n ==' 1 ') cin >> buf; n = atoi (buf.c_str()); break; – Aysin

+0

uhm, no ... if (n == '1' || n == '1') совпадает с if (n == '1'), так как вы используете OR для двух условий, которые являются одна и та же. Мое решение работает практически так же, как решение Ed Heal, поэтому, если это сработало, отлично, проблема решена – Sampaio

0

Попробуйте изменить

if(n == 'q' || n == 'Q') 

в

if(buf[0] == 'q' || buf[0] == 'Q') 

Это будет иметь доступ к первому символу на входе и сравните его с требуемым символом «Q» или ' q '

+0

большое вам спасибо! – Aysin

+0

@OruzAysn - Это сработало? –

+0

действительно! Большое вам спасибо – Aysin

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