2015-02-25 5 views
-3

Я создаю книгу архивной программы, и один из членов данных говорит, что книга читается или нет. Однако я не могу заставить программу писать «Да» на экран, поэтому я предполагаю, что она никогда не меняется, хотя я говорю «Y», когда меня спрашивают, прочитал ли я книгу. Может ли кто-нибудь увидеть, что я сделал неправильно?Булево значение всегда ложно

cout << "\n\tEnter title of book: "; 
cin >> title; 
cout << "\tEnter author of book: "; 
cin >> author; 
cout << "\tEnter genre of book (1. Crime, 2. Sports, 3. Science, 4. Drama): "; 
cin >> choice; 
switch(choice) 
{ 
    case 1: genre = crime; break; 
    case 2: genre = sports; break; 
    case 3: genre = science; break; 
    case 4: genre = drama; break; 
} 
cout << "\tEnter year of publication: "; 
cin >> yearPublished; 
cout << "\tHave you read the book? (Y/N): "; 
cin >> ch; 
if(toupper(ch) == 'Y') 
{ 
    haveRead == true; 
} 
else 
{ 
    haveRead == false; 
} 
+6

Утверждение 'hasRead == true;' не является назначением. Включите больше предупреждений компилятором, и он должен предупредить вас об этом. –

+1

Что произойдет, если пользователь вводит выбор не в инструкции switch? –

ответ

5
haveRead == true 

сравнение, а не назначение. Удалите один = от обоих положений

if(toupper(ch) == 'Y') 
    haveRead = true; 
else 
    haveRead = false; 
+2

Или это может быть упрощено для 'haveRead = (toupper (ch) == 'Y');' – clcto

+0

Спасибо! Мои жанры перечислены, поэтому они не входят в кавычки (хотя, я полагаю, они могут быть просто строками). –

1

== Оператор является оператор сравнения, используемый для сравнения вещей. Здесь вы просто хотите назначить, так что вам нужен оператор присваивания =.

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