命令行菜单与不同的层在c++中

Command line menu with different layers in c++

本文关键字:c++ 菜单 命令行      更新时间:2023-10-16

我完全是个业余爱好者,我遇到了瓶颈。我想了几个小时才决定发帖,在那之前我试图自己找到失败的地方。

我是一个larper,我在后启示录的东西,并试图编程一个小工具,只是作为一个事件的效果,但即使编译器没有显示任何错误,也有问题。

我正在尝试用不同的图层制作一个菜单。一个开始层进入真正的菜单层,从那里我可以选择我想要去显示预编程状态的方式,但有一件事。不管我做了什么选择,我总是会选择真正的菜单层。开始工作,我可以选择去真正的菜单或退出。但在那之后,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 entdecktn";
    cout << "   ... Veraltetes Betriebssystem entdecktn";
    cout << "   ... Überschreibe Steuerungn";
    cout << "   ... Übertrage Administrative Steuerung auf aktuelles Interfacen";
    cout << "   ... Trenne lokales Benutzerinterfacen";
    cout << "n";
    usleep(3000000);
    cout << "   ... Fertig ...n";
    cout << "n";
    usleep(3000000);
    system("clear");
    cout << "   Erfolgreichn";
    cout << "   Fortfahren? Ja = 1 / Nein = 2n";
    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 Eingaben";
                break;
        }
        }   while(choice1 != 2);
}
void erstesMenu(void) {
//  do
        {

    cout << "   -- Willkommen Agent Skydd --n";
        usleep(1000000);
    cout << "n";
    cout << "   (1) - Statusabfragen";
    cout << "   (2) - Stromverteilungn";
    cout << "   (3) - Wartungsarbeitenn";
    cout << "   (4) - Beendenn";
    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 Eingaben";
                break;
        }
    } while(choice1 != 4);
}
void verteilungMenu(void) {

    cout << "n";
    cout << "---------- Stromverteilung ----------n";
    cout << "n";
    cout << "   (1) - Priorisierungn";
    cout << "   (2) - Aktuelle Verteilungn";
    cout << "   (3) - Zurückn";
    cout << "   Eingabe: ";
            cin >> choice2;
    cout << "n";
}
void verteilung() {
    do {
        verteilungMenu();
        switch(choice2){
            case 1:
                cout << "   1. Verteidigungn";
                cout << "   2. Medizinische Versorgungn";
                cout << "   3. Bevölkerungn";
                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ügungn";
                break;
            case 3:
        cout << "n";
                break;
            default:
        cout << "   Ungültige Eingaben";
                break;
        }
    } while(choice2 != 3);

}

void wartungMenu(void) {

    cout << "----------  Wartungsmenü   ----------n";
    cout << "   (1) - Statusn";
    cout << "   (2) - Wartung startenn";
    cout << "   (3) - Backn";
    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ährleistenn";
                break;
            case 2:
                cout << "   Wartungszyklus gestartetn";
                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 Eingaben";
                break;
        }
    } while(choice2 != 3);

}

void aktuellMenu(void) {
        {
    cout << "---------- Statusabfrage ----------n";
    cout << "n";
    cout << "   (1) - Turbine 1n";
    cout << "   (2) - Turbine 2n";
    cout << "   (3) - Turbine 3n";
    cout << "   (4) - Zurückn";
    cout << "n";
    cout << "Eingabe: ";
            cin >> choice2;
    }
    }
void aktuell() {
    do {
        aktuellMenu();
        switch(choice2) {
            case 1:
                cout << "n";
                cout << "   Turbine 1 auf 35% Leistungn";
                cout << "n";
                break;
            case 2:
                cout << "n";
                cout << "   Turbine 2 auf 5% Leistungn";
                cout << "n";
                break;
            case 3:
                usleep(5000000);
                cout << "n";
                cout << "   Turbine 3 Offlinen";
                usleep(1000000);
                cout << "   Fehlermeldung wird angezeigt:n";
                usleep(500000);
                cout << "   Durch Schaden verursachter technischer Defektn";
                cout << "   Schadensmeldung:n";
                usleep(1000000);
                cout << "   Zuleitung:      Defektn";
                usleep(500000);
                cout << "   Regenerator:    Defektn";
                usleep(500000);
                cout << "   Kondensator:    Defektn";
                usleep(500000);
                cout << "   Pumpe:          Defektn";
                cout << "n";
                break;
            case 4:
                cout <<"n";
                break;

            default:
                cout << "   Ungültige Eingaben";
                break;
        }
    } while(choice2 != 4);
}
我知道,不漂亮,但我的第一次尝试,我想,我可以做得更糟。是的,输出文本是德语。是的,我以前从来没有写过c++。

我希望你们能帮助我,我打赌解决方案很简单,但我只是看不到它(我想,当我读到解决方案时,我会捂着脸)。

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

void erstesMenu(void) {
    do {

    cout << "   -- Willkommen Agent Skydd --n";
        usleep(1000000);
    cout << "n";
    cout << "   (1) - Statusabfragen";
    cout << "   (2) - Stromverteilungn";
    cout << "   (3) - Wartungsarbeitenn";
    cout << "   (4) - Beendenn";
    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 Eingaben";
                break;
        }
    } while(choice1 != 4);
}

这里你可以在erstesMenu()中选择2,但是在erstes()中你根据选择1而不是2来切换。这可能就是问题所在。