c ++: оператор if не работает правильно и переходит к неверному выводу - PullRequest
1 голос
/ 01 октября 2019

Я только начал изучать c ++ и пытался создать автоматизированную систему заказов, но, пытаясь запустить ее, прежде чем продолжить работу с ней, я столкнулся с этой проблемой:

#include <iostream>
using namespace std;

char acoustic, fender, hartwood, electric, gibson, ibanez, drums, pearl, 
roland, piano, casio;
char rolandpi, equip, string, headphone, amp, mixer, micro, tuner, pick, 
music, Yes, No;

int pay1 = 0, pay2 = 0;

int main()
{
    cout << "Welcome to the Music Shop" << endl <<endl;

    cout << "a. Acoustic Guitar" << endl;
    cout << "a.1 Fender Acoustic Guitar   - P6,900.00" << endl;
    cout << "a.2 Hartwood Acoustic Guitar - P6,300.00" << endl <<endl;

    cout << "b. Electric Guitar" << endl;
    cout << "b.1 Gibson Electric Guitar   -P8,500.00" << endl;
    cout << "b.2 Ibanez Electric Guitar   -P25,000.00" << endl <<endl;

    cout << "c. Drums" << endl;
    cout << "c.1 Pearl Drum Kits          -P27,000.00" << endl;
    cout << "c.2 Roland Electronic Drums  -P24,000.00" << endl <<endl;

    cout << "d. Piano" << endl;
    cout << "d.1 Casio Digital Piano      -P19,000.00" << endl;
    cout << "d.2 Roland Piano             -P120,000.00" << endl <<endl;

    cout << "e. Music Equipments" << endl;
    cout << "e.1 Guitar String            -P113.00" << endl;
    cout << "e.2 Headphones               -P1,600.00" << endl;
    cout << "e.3 Amplifier                -P2,800.00" << endl;
    cout << "e.4 Digital Mixer            -P4,750.00" << endl;
    cout << "e.4 Vocal Microphone         -P860.00" << endl;
    cout << "e.5 Guitar Tuner             -P537.00" << endl;
    cout << "e.6 Guitar Pick              -P360.00" << endl <<endl;

    cout << "Choose the music instrument or equipment you want to buy: ";
    cin >> music;

    switch (music)
    {
        case 'a':

        cout<< "Acoustic Guitar" << endl;
        cout<< "1. Fender Acoustic Guitar   - P6,900.00" << endl;
        cout<< "2. Hartwood Acoustic Guitar - P6,300.00" << endl <<endl;
        cout<<"Choose from the available Acoustic Guitars:";
        cin>>acoustic;

        if (acoustic == 1){
            cout<<"Enter your payment:";
            cin>>pay1;
            if (pay1=6900){
                cout<<"You have succesfully purchased Fender Acoustic Guitar"<<endl;
            }
                else if (pay1>6900){
                    pay1 -= 6900;
                    cout<<"Your change is:"<<pay1<<endl;
                }
                    else (pay1<6900);
                    {
                        cout<<"You do not have enough money"<<endl;
                    }
        }
        else if (acoustic == 2){
            cout<<"Enter your payment:";
            cin>>pay1;
            if (pay1=6300){
                cout<<"You have succesfully purchased Fender Acoustic Guitar"<<endl;
            }
                else if (pay1>6300){
                    pay1 -= 6300;
                    cout<<"Your change is:"<<pay1<<endl;
                }
                    else (pay1<6300);
                    {
                        cout<<"You do not have enough money"<<endl;
                    }
        }
        else {
            cout<<"Invalid"<<endl;
        }
    }
}

Я уже проверил свои if else утверждения ине могу найти, что не так.

После ввода 1 или 2 из «Выбрать из доступных акустических гитар» он переходит к «недействительным».

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Вы читаете здесь char:

cout << "Choose from the available Acoustic Guitars:";
cin >> acoustic;

Но затем вы сравниваете его с int одной строкой позже:

if (acoustic == 1) {

Вместо этого должно быть:

if (acoustic == '1') {

Также это:

if (pay1 = 6900) {

Должно быть:

if (pay1 == 6900) {

Потому что в противном случае вы получите неправильный вывод независимо от того, что введено, потому что pay1 = 6900 устанавливаетpay1 в 6900 и возвращает 6900, который неявно преобразуется в true.

Также эта строка:

else (pay1 < 6900);

Необходимо изменить на

else if (pay1 < 6900)

Потому что в противном случае (pay1 < 6900) не является условием оператора if, а вместо этого (pay1 < 6900); происходит в случае else (который просто вычисляет логическое значение и отбрасывает его), вызывая следующее "You do not have enough money" сообщение, которое всегда печатается.

0 голосов
/ 01 октября 2019

@ Блейз, спасибо тебе большое, теперь я почти закончил, теперь у меня проблема с Да или Нет после ввода Да, программа просто заканчивается, и я не знаю, что с ней не так>. <</p>

cout<<"\nWould you like to buy an Electric Guitar?"<<endl;
    cout<<"Yes or No?"<<endl;
    cin>>answer;

    if (answer == Yes){
    cout<< "Electric Guitar" << endl;
    cout<< "1. Gibson Electric Guitar   -P8,500.00" << endl;
    cout<< "2. Ibanez Electric Guitar   -P25,000.00" << endl <<endl;
    cout<<"Choose from the available Electric Guitars:";
    cin>>electric;

        if (electric=='1'){
        cout<<"Enter your payment:";
        cin>>pay2;
        if (pay2==8500){
            cout<<"You have succesfully purchased Fender Acoustic Guitar"<<endl;
        }
            else if (pay2>8500){
                pay2 -= 8500;
                cout<<"Your change is:"<<pay2<<endl;
            }
                else if(pay2<8500)
                {
                    cout<<"You do not have enough money"<<endl;
                }   
    }
    else if (electric=='2'){
        cout<<"Enter your payment:";
        cin>>pay2;
        if (pay2==25000)
        {
            cout<<"You have succesfully purchased Fender Acoustic Guitar"<<endl;
        }
            else if (pay2>25000){
                pay2 -= 25000;
                cout<<"Your change is:"<<pay2<<endl;
            }
                else if (pay2<25000)
                {
                    cout<<"Invalid"<<endl;
                }   
    }
    else {
        cout<<"Invalid";
    }
} 
    else if (No){
        cout<<"Thank you for checking our other products";
}
}
}
...