2015-10-25 2 views
-1

Итак, когда я ввожу месяц, который хотел бы использовать, например, декабрь, и я ставлю 722 в качестве часов, программа говорит: «Количество введенных часов не может превышать количество часов в течение месяца 720 ". Есть ли способ исправить? Я не хочу делать заявления за каждый месяц, я чувствую, что есть более простой способ. Это также моя первая программа колледжаЭто сравнение строк не работает

int userPackage, userHours; //Declaring integer variables 
double savings, savings2, total; //Declaring double value 
string userMonth; 
cout<<"\tHello.\nEnter the number of the package you have\n1) Package A\n2) Package B\n3) Package C\n"; //Prompts the user for their package in a menu like fashion 
cin>>userPackage; //gets package 
if(userPackage > 3 || userPackage < 1) //Error output for numbers that don't match packages 
{ 
    cout<<"Error, invalid choice"; 
    return 0; 
} 

cout<<"Enter the number of hours you have been online."; //Propmts the user for the number of hours they've been online 
cin>>userHours; //gets hours 
cout<<"Enter the month (by name): "; 
cin>>userMonth; 
cout<<"\n"; 
if(userMonth == "January","March","May","July","August","October","December") 
{ 
    if (userHours > 744) 
    { 
     cout<<"The amount of hours you entered cannot exceed the amount of hours within the month 744"; 
     return 0; 
    } 
} 
if(userMonth == "April", "June", "September", "November"); 
{ 
    if(userHours > 720) 
    { 
     cout<<"The amount of hours you entered cannot exceed the amount of hours within the month 720"; 
     return 0; 
    } 
} 
if(userMonth == "February"); 
{ 
    if (userHours > 672) 
    { 
     cout<<"The amount of hours you entered cannot exceed the amount of hours within the month 672"; 
     return 0; 
    } 
} 
+0

'userMonth ==" Январь "," Марш "," Май "," Июль "," Август "," Октябрь "," Декабрь "' Это не то, как вы сравниваете строку с несколькими возможностями. Вы можете хранить эти строки в статическом массиве const или задавать и находить, если строка находится внутри него. –

+0

'if (userMonth ==« Апрель »,« Июнь »,« Сентябрь »,« Ноябрь »);« Готов поспорить, вы никогда не видели оператора 'if', как это напечатано в любой книге, учебнике, веб-сайте и т. Д. который утверждает, что обучает C++. Итак, как вы пришли к этому? – PaulMcKenzie

ответ

1

if(userMonth == "January","March","May","July","August","October","December")

Это не делать то, что вы думаете, что делает (т.е. не сравнить userMonth каждой из строк. (предполагается, что вы также хотите использовать else if, даже если ваш код не соответствует):

if (userMonth == "January" || 
    userMonth == "March" || 
    userMonth == "July" || 
    userMonth == "August" || 
    userMonth == "October" || 
    userMonth == "December") 
{ 
    ... 
} 
else if (userMonth == "April" || 
    userMonth == "June" || 
    userMonth == "September" || 
    userMonth == "November") 
{ 
} 
else if (userMonth == "February") 
{ 
} 

Примечание: Это также чувствительные к регистру сравнения (т. Е. «Январь» не эквивалентен «январю» или другим различиям в случае), и может быть лучше преобразовать все ко всем нижним или всем верхним корпусам.

if(userMonth == "April", "June", "September", "November");
// problematic trailing semi-colon ^

Это завершает if заявление и следующий блок выполняется безоговорочно. Поэтому, когда вводится 722, это всегда больше 720, и вы получаете сообщение, которое видите.

У вас есть эта же ошибка в логике if для «Февраля».

+0

Ваша формулировка подразумевает, что 'if (userMonth ==" January "," March ", ' равнозначно 'if (userMonth ==" January "|| userMonth ==" March "|| ', который это не так. – Peter

+0

@Peter Я вижу вашу точку зрения и разъяснил свою формулировку, спасибо. –

+0

Спасибо за помощь. Я попытался найти решение в Интернете, но на самом деле не знал, как рассказать о моем вопросе. Я все еще изучаю все термины Но да, это сработало, и я смог продолжить кодирование программы. Большое спасибо! –

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