2015-09-14 6 views
0

Я только начинаю изучать C++, но у меня возникают проблемы с обнаружением ошибки. Когда я компилирую свой код, кажется, что он не может пройти первые два оператора if. После того, как инструкции в операциях if появятся на экране компилятора, программа внезапно прекратится. Я пытаюсь понять, почему я не могу вводить данные в частях std::cin >>, несмотря на то, что код не содержит ошибок в компиляторе. Если бы кто-нибудь мог помочь мне понять это, это было бы очень полезно.Пользовательский ввод C++ не регистрируется

#include <iostream> 

int main(int argc, const char * argv[]) { 
    // insert code here... 

    std::string internetPlan; 
    float monthlyBill; 
    float internetPlanA = 9.95; 
    float internetPlanB = 13.95; 
    float internetPlanC = 29.99; 
    float amountSaved1; //amount saved comparing plan A to plan B 
    float amountSaved2; // amount saved comparing plan A to plan C 
    float amountSaved3; //amount saved comparing plan B to plan C 
    std::string months[12] = {"January", "February", "March", "Abril", "May", "June", "July", "August", "September", "October", "November", "December"}; 
    std::string userInput; 
    int hoursOfMonth; 
    std::cout << "Welcome to the Ardeo Internet Service Provider\n"; 
    std::cout << "The following are our internet service plans\n"; 
    std::cout << "Package A: $9.95 per month for 10 hours access. Additional hours are $2.00 per hour\n"; 
    std::cout << "Package B: $13.95 per month for 20 hours access. Additional hours are $1.00 per hour\n"; 
    std::cout << "Package C: $29.99 per month per unlimited access\n"; 

    std::cout << "Please enter your internet plan. Enter A, B or C"; 
    std::cin >> internetPlan; 
    if (internetPlan!= "A" || internetPlan!="a" || internetPlan != "B" || internetPlan!= "b" || internetPlan != "C" || internetPlan != "c") { 
     std::cout << "Please enter a valid plan\n"; 
     std::cout << "Enter plan A, B or C\n"; 
     std::cin >> internetPlan; 
    } 

    std::cout << "Please enter the hours you used\n"; 
    std::cin >> hoursOfMonth; 
    if (hoursOfMonth < 0 || hoursOfMonth > 744) { 
     std::cout << "You cannot have negative hours or more than 744\n"; 
     std::cout << "Please enter the hours again\n"; 
     std::cin >> hoursOfMonth; 
     return hoursOfMonth; 
    } 


    std::cout << "Please enter the month"; 
    std::cin >> userInput; 

    if (userInput == months[0] && hoursOfMonth > 744) { 
     std::cout << "Sorry you have too many hours for the month of Janurary\n"; 
     std::cout << "Please enter month again"; 
     std::cin>> userInput; 
    } else if (userInput == months[1] && hoursOfMonth > 672){ 
     std::cout << "Sorry too many hours for Februrary\n"; 
     std::cout << "Please enter month again"; 
     std::cin>> userInput; 
    } else if (userInput == months[2] && hoursOfMonth > 744) { 
     std::cout << "Sorry too many hours for March\n"; 
     std::cout << "Please enter month again"; 
     std::cin >> userInput; 
    } else if (userInput == months[3] && hoursOfMonth > 720) { 
     std::cout << "Sorry too many hours for Abril\n"; 
     std::cout << "Please enter month again"; 
     std::cin>> userInput; 
    } else if (userInput == months[4] && hoursOfMonth > 744) { 
     std::cout << "Sorry too many hours for May\n"; 
     std::cout << "Please enter month again"; 
     std::cin >> userInput; 
    } else if (userInput == months[5] && hoursOfMonth > 720) { 
     std::cout << "Sorry too many hours for June\n"; 
     std::cout << "Please enter month again"; 
     std::cin>> userInput; 
    } else if (userInput == months[6] && hoursOfMonth > 744){ 
     std::cout << "Sorry too many hours for July\n"; 
     std::cout << "Please enter month again"; 
     std::cin>> userInput; 
    } else if (userInput == months[7] && hoursOfMonth > 744){ 
     std::cout << "Sorry too many hours for August\n"; 
     std::cout << "Please enter month again"; 
     std::cin >> userInput; 
    } else if (userInput == months [8] && hoursOfMonth > 720){ 
     std::cout << "Sorry too many hours for September\n"; 
     std::cout << "Please enter month again"; 
     std::cin>> userInput; 
    } else if (userInput == months[9] && hoursOfMonth > 744){ 
     std::cout << "Sorry too many hours for October\n"; 
     std::cout << "Please enter month again"; 
     std::cin>> userInput; 
    } else if (userInput == months[10] && hoursOfMonth > 720) { 
     std::cout << "Sorry too many hours for November\n"; 
     std::cout << "Please enter month again"; 
     std::cin>> userInput; 
    } else if (userInput == months[11] && hoursOfMonth > 744){ 
     std::cout << "Sorry too many hours for December\n"; 
     std::cout << "Please enter month again"; 
     std::cin >> userInput; 
    } 

    // used to determine how much money would be saved 
    if (internetPlan == "A" || internetPlan == "a") 
    { 
     if (hoursOfMonth <= 10) { 
     } else { 
      monthlyBill = internetPlanA + ((hoursOfMonth-10)*2); 
      std::cout << "Your bill will be $" << monthlyBill << "\n"; 
      amountSaved1 = monthlyBill - ((internetPlanB+1*(hoursOfMonth -10))); 
      std::cout << "You would save $"<<amountSaved1<< " with internet plan B\n"; 
      amountSaved2 = monthlyBill - internetPlanC; 
      std::cout << "You would save $" <<amountSaved2<< " with internet plan C\n"; 
     } 
    } else if (internetPlan == "B" || internetPlan == "b") { 
     if (hoursOfMonth <= 20) { 
      monthlyBill = internetPlanB; 
      std::cout << "Your monthly bill will be $"<< monthlyBill << "\n"; 
     } else { 
      monthlyBill = internetPlanB + ((hoursOfMonth - 20)*1); 
      amountSaved3 = monthlyBill - internetPlanC; 
      std::cout << "Your monthly bill will be $"<<monthlyBill << "\n"; 
      std::cout << "You can save $"<<amountSaved3 << " if you switch to internet plan C\n"; 
     } 

    } 
    return 0; 
} 
+3

Пожалуйста, попробуйте сузить его до соответствующего кода, кода, с которым у вас действительно возникли проблемы. Или еще лучше, попробуйте создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и покажите нам. –

+2

Однако одной из проблем может быть утверждение 'return' в одной из проверок. Это приведет к выходу программы. –

+2

Вы хотите использовать '&&' not '||': 'internetPlan! =" A "&& internetPlan! =" A "...' –

ответ

1

У вас есть хорошее представление о защите недействительных данных пользователя. Но ваш код немного неправильный. Использование if-предложения не возвращает сегмент кодов. Что вы надеетесь должно быть что-то подобное:

while (internetPlan!= "A" && internetPlan!="a" && internetPlan != "B" && internetPlan!= "b" && internetPlan != "C" && internetPlan != "c") { 
    std::cout << "Please enter a valid plan\n"; 
    std::cout << "Enter plan A, B or C\n"; 
    std::cin >> internetPlan; 
} 

и

while (hoursOfMonth < 0 || hoursOfMonth > 744) { 
    std::cout << "You cannot have negative hours or more than 744\n"; 
    std::cout << "Please enter the hours again\n"; 
    std::cin >> hoursOfMonth; 
} 

Ваша проблема по программе, выходящем должна быть следствием утверждения возврата во втором сегменте. return используется для завершения процедуры (со значением), поэтому int main() завершен, и программа завершается.

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