我是一个业余爱好者,我撞墙了。我想在我决定发帖前几个小时,在此之前我试图自己找到失败。
我和他在后世界末日的东西中并尝试编写一个小工具,就像一个事件的效果,但即使编译器没有显示任何错误,那里是错的。
我正在尝试制作包含不同图层的菜单。一个开始层进入真正的菜单层,从那里我可以选择我想要显示预编程状态的方式,但有一些东西。我做出的选择并不重要,我总是落在真正的菜单层上。开始工作,我可以选择去真正的菜单或退出。但是在那之后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 ++。
我希望你们可以帮助我,我打赌解决方案很简单,但我只是没有看到它(我想,当我阅读解决方案时,我将面对自己)。
我希望你们能帮助我: - )
答案 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.这可能是问题所在。