为什么C ++中的多个开关不能一起工作

问题描述 投票:-1回答:1

我在c ++中使用了一堆开关,但它们不能一起工作。像在第一个菜单中一样,仅开关'W'启动,但是开关'M'总是关闭窗口。为什么?我找不到答案。该代码长而波兰语,不关心字符。

#include <iostream>
#include <conio.h>
#include <iomanip>
#include <limits>
#include<string.h>
#include <string>

using namespace std;

std::string PL( const char * text )
{
    std::string result;
    for(; * text; text++ )
    switch( * text )
    {
    case 'ケ': result += static_cast < char >( 0xa5 ); break;
    case '・: result += static_cast < char >( 0x86 ); break;
    case '・: result += static_cast < char >( 0xa9 ); break;
    case 'ウ': result += static_cast < char >( 0x88 ); break;
    case '・: result += static_cast < char >( 0xe4 ); break;
    case '・: result += static_cast < char >( 0xa2 ); break;
    case '・: result += static_cast < char >( 0x98 ); break;
    case 'ソ': result += static_cast < char >( 0xbe ); break;
    case '・: result += static_cast < char >( 0xab ); break;
    case '・': result += static_cast < char >( 0xa4 ); break;
    case 'ニ': result += static_cast < char >( 0x8f ); break;
    case 'ハ': result += static_cast < char >( 0xa8 ); break;
    case '」': result += static_cast < char >( 0x9d ); break;
    case 'ム': result += static_cast < char >( 0xe3 ); break;
    case 'モ': result += static_cast < char >( 0xe0 ); break;
    case '・: result += static_cast < char >( 0x97 ); break;
    case 'ッ': result += static_cast < char >( 0xbd ); break;
    case '・: result += static_cast < char >( 0x8d ); break;
        default: result += * text; break;
    }
    return result;
}

int main()
{

    long double x,y;
    using namespace std;
    char glowne,wej,wyj;
    cout << PL("Witaj drogi uソytkowniku!")<<endl;
    cout << PL("Wybierz rodzaj jednostek wagi(W) czy miary(M)")<<endl;
    cin >> glowne;

    switch(glowne) {
        case 'W':{
        cout << PL("Uwaga! mg=m g=g dag=d kg=k q=q t=t") << endl;
        cout << PL("Podaj jednostk・wej彡iowケ: ");
        cin >> wej;
        cout << PL("Podaj jednostk・wyj彡iowケ: ");
        cin >> wyj;
        cout << PL("Podaj liczb・");
        cin >> x;

        switch(wej) {
        case 'm': {
            switch(wyj){
                case 'm': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x<<"mg";
                    getch();
                    exit(0);
                    break;
                }
                case 'g': {
                    cout.precision(4);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 4miej. po przecinku): ")<<fixed<<x/1000<<"g";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/1000<<"g";
                    exit(0);
                    break;
                }
                case 'd': {
                    cout.precision(5);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 5miej. po przecinku) : ")<<fixed<<x/10000<<"dag";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi : ")<<x/10000<<"dag";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout.precision(7);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 7miej. po przecinku) : ")<<fixed<<x/1000000<<"kg";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/1000000<<"kg";
                    getch();
                    exit(0);
                    break;
                }
                case 'q': {
                    cout.precision(9);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 9miej. po przecinku): ")<<fixed<<x/100000000<<"q";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/100000000<<"q";
                    getch();
                    exit(0);
                    break;
                }
                case 't': {
                    cout.precision(10);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 10miej. po przecinku): ")<<fixed<<x/1000000000<<"t";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/1000000000<<"kg";
                    getch();
                    exit(0);
                    break;
                }
                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }


            }
            break;
        }
        case 'g': {
            switch(wyj){
                case 'm': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*1000<<"mg";
                    getch();
                    exit(0);
                    break;
                }
                case 'g': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x<<"g";
                    getch();
                    exit(0);
                    break;
                }
                case 'd': {
                    cout.precision(3);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 3miej. po przecinku) : ")<<fixed<<x/10<<"dag";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi : ")<<x/10<<"dag";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout.precision(4);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 4miej. po przecinku) : ")<<fixed<<x/1000<<"kg";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/1000<<"kg";
                    getch();
                    exit(0);
                    break;
                }
                case 'q': {
                    cout.precision(6);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 6miej. po przecinku): ")<<fixed<<x/100000<<"q";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/100000<<"kg";
                    getch();
                    exit(0);
                    break;
                }
                case 't': {
                    cout.precision(7);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 7miej. po przecinku): ")<<fixed<<x/1000000<<"t";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/1000000<<"kg";
                    getch();
                    exit(0);
                    break;
                }
                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }

            break;
        }
        case 'd': {
                        switch(wyj){
                case 'm': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*10000<<"mg";
                    getch();
                    exit(0);
                    break;
                }
                case 'g': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*10<<"g";
                    getch();
                    exit(0);
                    break;
                }
                case 'd': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu: ")<<x<<"dag";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout.precision(3);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 3miej. po przecinku) : ")<<fixed<<x/100<<"kg";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/100<<"kg";
                    getch();
                    exit(0);
                    break;
                }
                case 'q': {
                    cout.precision(5);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 5miej. po przecinku): ")<<fixed<<x/10000<<"q";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/10000<<"q";
                    getch();
                    exit(0);
                    break;
                }
                case 't': {
                    cout.precision(6);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 6miej. po przecinku): ")<<fixed<<x/100000<<"t";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/100000<<"t";
                    getch();
                    exit(0);
                    break;
                }
                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }

            break;
        }
        case 'k': {
                        switch(wyj){
                case 'm': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*1000000<<"mg";
                    getch();
                    exit(0);
                    break;
                }
                case 'g': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x*1000<<"g";
                    getch();
                    exit(0);
                    break;
                }
                case 'd': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x*100<<"dag";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x<<"dag";
                    getch();
                    exit(0);
                    break;
                }
                case 'q': {
                    cout.precision(4);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 4miej. po przecinku): ")<<fixed<<x/100<<"q";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/100<<"q";
                    getch();
                    exit(0);
                    break;
                }
                case 't': {
                    cout.precision(5);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 5miej. po przecinku): ")<<fixed<<x/1000<<"t";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/1000<<"t";
                    getch();
                    exit(0);
                    break;
                }
                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }

            break;
        }

            break;
        }
        case 'q': {
                  switch(wyj){
                case 'm': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*100000000<<"mg";
                    getch();
                    exit(0);
                    break;
                }
                case 'g': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x*100000<<"g";
                    getch();
                    exit(0);
                    break;
                }
                case 'd': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x*10000<<"dag";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x*100<<"kg";
                    getch();
                    exit(0);
                    break;
                }
                case 'q': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x<<"q";
                    getch();
                    exit(0);
                    break;
                }
                case 't': {
                    cout.precision(5);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 5miej. po przecinku): ")<<fixed<<x/1000<<"t";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/1000<<"kg";
                    getch();
                    exit(0);
                    break;
                }
                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }

            break;
        }
        case 't': {
                              switch(wyj){
                case 'm': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*1000000000<<"mg";
                    getch();
                    exit(0);
                    break;
                }
                case 'g': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x*1000000<<"g";
                    getch();
                    exit(0);
                    break;
                }
                case 'd': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x*100000<<"dag";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x*1000<<"kg";
                    getch();
                    exit(0);
                    break;
                }
                case 'q': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x*10<<"q";
                    getch();
                    exit(0);
                    break;
                }
                case 't': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x<<"q";
                    getch();
                    exit(0);
                    break;
                }
                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }
        case 'M':{      
        cout << PL("Uwaga! mm=n, cm=c, dm=d, m=m, km=k");
        cout << PL("Podaj jednostk・wej彡iowケ: ");
        cin >> wej;
        cout << PL("Podaj jednostk・wyj彡iowケ: ");
        cin >> wyj;
        cout << PL("Podaj liczb・");
        cin >> x;
        switch(wej) {
        case 'n': {
            switch(wyj){
                case 'n': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x<<"mm";
                    getch();
                    exit(0);
                    break;
                }
                case 'c': {
                    cout.precision(2);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 2miej. po przecinku): ")<<fixed<<x/10<<"cm";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/10<<"cm";
                    getch();
                    exit(0);
                    break;
                }
                case 'd': {
                    cout.precision(3);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 3miej. po przecinku) : ")<<fixed<<x/100<<"dm";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi : ")<<x/100<<"dm";
                    getch();
                    exit(0);
                    break;
                }
                case 'm': {
                    cout.precision(4);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 4miej. po przecinku) : ")<<fixed<<x/1000<<"m";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/1000<<"m";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout.precision(9);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 9miej. po przecinku): ")<<fixed<<x/1000000<<"km";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/1000000<<"km";
                    getch();
                    exit(0);
                    break;
                }

                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }


            }
            break;
        }
        case 'c': {
                        switch(wyj){
                case 'n': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*10<<"mm";
                    getch();
                    exit(0);
                    break;
                }
                case 'c': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x<<"cm";
                    getch();
                    exit(0);
                    break;
                }
                case 'd': {
                    cout.precision(2);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 2miej. po przecinku) : ")<<fixed<<x/10<<"dm";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi : ")<<x/10<<"dm";
                    getch();
                    exit(0);
                    break;
                }
                case 'm': {
                    cout.precision(3);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 3miej. po przecinku) : ")<<fixed<<x/100<<"m";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/100<<"m";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout.precision(6);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 6miej. po przecinku): ")<<fixed<<x/100000<<"km";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/100000<<"km";
                    getch();
                    exit(0);
                    break;
                }

                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }


            }
        }
        case 'd': {
                                    switch(wyj){
                case 'n': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*100<<"mm";
                    getch();
                    exit(0);
                    break;
                }
                case 'c': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*10<<"cm";
                    getch();
                    exit(0);
                    break;
                }
                case 'd': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x<<"dm";
                    getch();
                    exit(0);
                    break;
                }
                case 'm': {
                    cout.precision(2);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 2miej. po przecinku) : ")<<fixed<<x/10<<"m";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/10<<"m";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout.precision(6);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 6miej. po przecinku): ")<<fixed<<x/10000<<"km";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/10000<<"km";
                    getch();
                    exit(0);
                    break;
                }

                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }

            break;
        }
        case 'm': {
                        switch(wyj){
                case 'n': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*1000<<"mm";
                    getch();
                    exit(0);
                    break;
                }
                case 'c': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*100<<"cm";
                    getch();
                    exit(0);
                    break;
                }
                case 'd': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*10<<"dm";
                    getch();
                    exit(0);
                    break;
                }
                case 'm': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x<<"m";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout.precision(4);
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi (wy忤ietlanie tylko 4miej. po przecinku): ")<<fixed<<x/1000<<"km";
                    cout <<endl<< PL("Twoja liczba po przeliczeniu z peウnケ precyzjケ wynosi: ")<<x/1000<<"km";
                    getch();
                    exit(0);
                    break;
                }

                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }

            break;
        }
        case 'k': {
                        switch(wyj){
                case 'n': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*1000000<<"mm";
                    getch();
                    exit(0);
                    break;
                }
                case 'c': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*100000<<"cm";
                    getch();
                    exit(0);
                    break;
                }
                case 'd': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*10000<<"dm";
                    getch();
                    exit(0);
                    break;
                }
                case 'm': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x*1000<<"m";
                    getch();
                    exit(0);
                    break;
                }
                case 'k': {
                    cout <<endl<< PL("Twoja liczba po przeliczeniu wynosi: ")<<x<<"km";
                    getch();
                    exit(0);
                    break;
                }

                default: {
                    cout <<endl<< PL("Nie prawidウowy argument wyj彡iowy, spruj ponownie");
                    getch();
                    exit(0);
                    break;
                }

            break;
        }

        break;
    }
    default:{
        cout << PL ("Nie prawidウowy argument! Spruj ponownie!");
        break;
    }
}
            break;
        }

    return 0;
    }
}

    }


}
}
}
}
}
}
}
}
c++ switch-statement
1个回答
0
投票

[exit(0)功能完成您的项目。

[getch()]为您暂停项目并等待控制台中的输入,一旦按下按钮,该功能将继续项目,然后由于exit(0)而结束您的项目>

并且请不要使用这样的开关,代码非常凌乱且不便于阅读。

© www.soinside.com 2019 - 2024. All rights reserved.