在c ++中使用不同图层的命令行菜单

时间:2015-09-29 01:36:22

标签: c++ command-line menu submenu

我是一个业余爱好者,我撞墙了。我想在我决定发帖前几个小时,在此之前我试图自己找到失败。

我和他在后世界末日的东西中并尝试编写一个小工具,就像一个事件的效果,但即使编译器没有显示任何错误,那里是错的。

我正在尝试制作包含不同图层的菜单。一个开始层进入真正的菜单层,从那里我可以选择我想要显示预编程状态的方式,但有一些东西。我做出的选择并不重要,我总是落在真正的菜单层上。开始工作,我可以选择去真正的菜单或退出。但是在那之后1-3直接进入同一个菜单,4会产生内存访问失败,整个事情崩溃。

在某个地方,我做错了,我无法找到失败。 我使用fedora LXDE并在Windows上使用code :: blocks。

#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <stdlib.h>


using namespace std;

void menu();
void mainMenu();
void erstes();
void erstesMenu();
void aktuell();
void aktuellMenu();
void verteilungMenu();
void verteilung();
void wartungMenu();
void wartung();
int choice1 = 0;
int choice2 = 3;



int main(int argc, char** argv) {



    menu();



    return 0;
}

void mainMenu(void) {

    system("clear");
    cout << "   ---- Alexandria Powermanagement -----\n";
    cout << "\n";
    cout << "   ... Geothermales Kraftwerkt entdeckt\n";
    cout << "   ... Veraltetes Betriebssystem entdeckt\n";
    cout << "   ... Überschreibe Steuerung\n";
    cout << "   ... Übertrage Administrative Steuerung auf aktuelles Interface\n";
    cout << "   ... Trenne lokales Benutzerinterface\n";
    cout << "\n";
    usleep(3000000);
    cout << "   ... Fertig ...\n";
    cout << "\n";
    usleep(3000000);
    system("clear");
    cout << "   Erfolgreich\n";
    cout << "   Fortfahren? Ja = 1 / Nein = 2\n";
    cout << "   Eingabe: ";
        cin >> choice1;

    }

void menu(){

        do {
        choice2 = 0;
        mainMenu();

        switch(choice1) {

            case 1:
                erstes();
        break;

            case 2:
                cout << "\n";
                cout << "Für die Republik! Für die Zukunft!\n";
                cout << "\n";
                break;

            default:
                cout << "   Ungültige Eingabe\n";
                break;

        }
        }   while(choice1 != 2);
}

void erstesMenu(void) {

//  do
        {


    cout << "   -- Willkommen Agent Skydd --\n";
        usleep(1000000);
    cout << "\n";
    cout << "   (1) - Statusabfrage\n";
    cout << "   (2) - Stromverteilung\n";
    cout << "   (3) - Wartungsarbeiten\n";
    cout << "   (4) - Beenden\n";
    cout << "\n";
    cout << "   Eingabe: ";
            cin >> choice2;
    }
//  while(choice2 != 4);
    }

void erstes() {

    do {
        erstesMenu();

        switch(choice2) {

            case 1:
                aktuellMenu();
                break;

            case 2:
                verteilungMenu();
                break;

            case 3:
                wartungMenu();
                break;

            case 4:
        cout << "\n";
        cout << "Für die Republik! Für die Zukunft!\n";
        cout << "\n";
                break;

            default:
        cout << "   Ungültige Eingabe\n";
                break;
        }

    } while(choice1 != 4);
}

void verteilungMenu(void) {


    cout << "\n";
    cout << "---------- Stromverteilung ----------\n";
    cout << "\n";
    cout << "   (1) - Priorisierung\n";
    cout << "   (2) - Aktuelle Verteilung\n";
    cout << "   (3) - Zurück\n";
    cout << "   Eingabe: ";
            cin >> choice2;
    cout << "\n";

}

void verteilung() {

    do {
        verteilungMenu();

        switch(choice2){

            case 1:
                cout << "   1. Verteidigung\n";
                cout << "   2. Medizinische Versorgung\n";
                cout << "   3. Bevölkerung\n";
                break;

            case 2:
            cout << "   Abwehrstellungen mit 7%\n";
            cout << "   Medical Chorps 10%\n";
            cout << "   T-Force 10%\n";
                cout << "13% bei aktueller Auslastung zur freien Verfügung\n";
                break;

            case 3:
        cout << "\n";
                break;

            default:
        cout << "   Ungültige Eingabe\n";
                break;

        }

    } while(choice2 != 3);


}



void wartungMenu(void) {



    cout << "----------  Wartungsmenü   ----------\n";
    cout << "   (1) - Status\n";
    cout << "   (2) - Wartung starten\n";
    cout << "   (3) - Back\n";
    cout << "   Eingabe: ";
            cin >> choice2;
}

void wartung() {

    do {
        wartungMenu();

        switch(choice2){

            case 1:
                cout << "   Turbine 1 wird im 6 Stündigen Wechsel die Auslastung mit Turbine 2 tauschen.\n";
                cout << "   Es wird Empfohlen diesen Zeitraum unberührt zu lassen um gleichmäßige Downtime der Turbinen zu gewährleisten\n";
                break;

            case 2:
                cout << "   Wartungszyklus gestartet\n";
                cout << "   Während der Wartung kann es vereinzelt zu Schwankungen im Stromnetz kommen. Wir bitten um Ihr Verständnis.\n";
                break;

            case 3:
                cout << "\n";
                break;

            default:
                cout << "   Ungültige Eingabe\n";
                break;

        }

    } while(choice2 != 3);


}



void aktuellMenu(void) {

        {

    cout << "---------- Statusabfrage ----------\n";
    cout << "\n";
    cout << "   (1) - Turbine 1\n";
    cout << "   (2) - Turbine 2\n";
    cout << "   (3) - Turbine 3\n";
    cout << "   (4) - Zurück\n";
    cout << "\n";
    cout << "Eingabe: ";
            cin >> choice2;
    }

    }

void aktuell() {

    do {
        aktuellMenu();

        switch(choice2) {

            case 1:
                cout << "\n";
                cout << "   Turbine 1 auf 35% Leistung\n";
                cout << "\n";
                break;

            case 2:
                cout << "\n";
                cout << "   Turbine 2 auf 5% Leistung\n";
                cout << "\n";
                break;

            case 3:
                usleep(5000000);
                cout << "\n";
                cout << "   Turbine 3 Offline\n";
                usleep(1000000);
                cout << "   Fehlermeldung wird angezeigt:\n";
                usleep(500000);
                cout << "   Durch Schaden verursachter technischer Defekt\n";
                cout << "   Schadensmeldung:\n";
                usleep(1000000);
                cout << "   Zuleitung:      Defekt\n";
                usleep(500000);
                cout << "   Regenerator:    Defekt\n";
                usleep(500000);
                cout << "   Kondensator:    Defekt\n";
                usleep(500000);
                cout << "   Pumpe:          Defekt\n";
                cout << "\n";
                break;

            case 4:
                cout <<"\n";
                break;


            default:
                cout << "   Ungültige Eingabe\n";
                break;

        }

    } while(choice2 != 4);
}

我知道,不是很漂亮但我第一次尝试,我想,我本可以做得更糟。是的,输出文本是德语。是的,我之前从未写过c ++。

我希望你们可以帮助我,我打赌解决方案很简单,但我只是没有看到它(我想,当我阅读解决方案时,我将面对自己)。

我希望你们能帮助我: - )

1 个答案:

答案 0 :(得分:0)

void erstesMenu(void) {

    do {


    cout << "   -- Willkommen Agent Skydd --\n";
        usleep(1000000);
    cout << "\n";
    cout << "   (1) - Statusabfrage\n";
    cout << "   (2) - Stromverteilung\n";
    cout << "   (3) - Wartungsarbeiten\n";
    cout << "   (4) - Beenden\n";
    cout << "\n";
    cout << "   Eingabe: ";
            cin >> choice2;
    } while(choice2 != 4);
    }

void erstes() {

    do {
        erstesMenu();

        switch(choice1) {

            case 1:
                aktuellMenu();
                break;

            case 2:
                verteilungMenu();
                break;

            case 3:
                wartungMenu();
                break;

            case 4:
        cout << "\n";
        cout << "Für die Republik! Für die Zukunft!\n";
        cout << "\n";
                break;

            default:
        cout << "   Ungültige Eingabe\n";
                break;
        }

    } while(choice1 != 4);
}

这里你在erstesMenu()中选择了choice2,但是在erstes()中你根据choice1切换,而不是2.这可能是问题所在。