命令行菜单与不同的层在c++中
Command line menu with different layers in c++
我完全是个业余爱好者,我遇到了瓶颈。我想了几个小时才决定发帖,在那之前我试图自己找到失败的地方。
我是一个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来切换。这可能就是问题所在。
相关文章:
- 无法获取菜单选择以运行函数.C++
- C++ 中的图形菜单
- C++ 程序菜单使用做同时和切换
- 我正在尝试创建一个菜单,但我的代码一直在循环
- 触发另一个窗口的菜单按钮
- 从子菜单返回后,正确的输入至少进入验证循环一次
- C++ 我的开关格式中的循环不允许我显示菜单选项或接受输入?
- 如何为我的游戏设置主菜单场景?QT C++
- C++循环菜单时做
- 难以从 CImageList 设置菜单项位图
- 如何将我的程序添加到文件和文件夹的macOS右键单击菜单?
- 如何以编程方式显示功能区按钮的下拉菜单?
- 如何在win32的窗口类中设置动态菜单?
- 为什么我的 Do-while 循环无法在C++中运行菜单
- 我正在尝试用 c++ 制作菜单,但不明白为什么它不循环
- 如何使用IExecuteCommand和动词在上下文菜单外壳扩展中显示本地化文本和自定义图标?
- 连接资源文件中的字符串,并将其传递给菜单项字符串 (winapi) c++
- 需要帮助主菜单C++
- 获取 c++ mfc vs2015 中弹出资源菜单项的 id
- QT 窗口模式禁用菜单中的操作