Datensatz von einem Bereich in einen anderen einfügen
-
Hallo,
Ich möchte ein Schiebedach-Simulationsprogramm schreiben und bin damit auch fast fertig. Jedoch muss ich, wenn die Batteriespannung unter 10 Volt liegt einen Eintrag in den Fehlerspeicher machen.
Das heisst der User wählt "Batterie unter 10 Volt" und kann dann zurück ins Hauptmenü und dort in den Fehlerspeicher, um dort zu sehen, dass "Batterie unter 10 Volt" simuliert wurde.
Wie kann ich das machen? Bin schon sehr am verzweifeln.
-
Versetz dich mal in jemanden hinein, der nicht deine Aufgabenstellung kennt und nicht weiß, was du überhaupt gemacht hast. Glaubst du derjenige hätte nach Lesen deines Beitrags irgendeine Ahnung worum es geht oder was überhaupt dein Frage ist?
-
Die Aufgabenstellung:
Programmieren Sie eine Software, die es ermöglicht verschieden Funktionen eines Autoschiebedachs (Öffnen/Schliessen über Bedienschalter/Fernbedienung, Auswahl im Batteriesensor ob Batteriespannung unter 10 Volt liegt, Fehlerspeicher usw.) simuliert.
Ich habe bis jetzt alles hingekriegt, d.h. das Hauptmenü, die einzelnen Menüs mit den Simulationen des Öffnungs - und Schließvorgangs und die Auswahl ob die Batteriespannung unter 10 Volt liegt.
Ich bräuchte Hilfe dabei, wie ich das hinkriegen kann, dass wenn man auswählt, dass die Batteriespannung unter 10 Volt liegt, dieser Fehler in den Fehlerspeicher eingetragen wird. Am besten noch mit der Systemuhrzeit.
Also es soll im Fehlerspeicher angezeigt werden, dass >10 Volt simuliert wurde.Ich hoffe ihr könnt mir helfen! Danke

-
...
-
Verstehe nicht, wo das Problem ist. Wenn du einen Fehler in den Fehlerspeicher schreiben sollst, heisst das eben konkret, dass du einen Fehler an einen vector/ein array von Fehlern anhängst. Das wars auch schon.
-
Das muss ja dann so ablaufen dass sobald "Batterie unter 10 Volt" simuliert wird, ein Eintrag in den Fehlerspeicher gemacht wird, der danach angeschaut werden kann.
Wüsste nicht wie ich das mit dem Code dazu machen soll. Und wie kann ich die Uhrzeit hinzufügen? also der code dafür.
-
Fehlerspeicher ist kein gängiger Begriff.
Zeig mal was Du bisher an Code verbrochen hast.So kann Dir niemand helfen.
-
Wie ist es denn, wenn Dein Fehlerspeicher einfach ein Container mit Fehlermeldungen ist?
Das ist einfach, und Du kannst schon eine Menge C++, wenn Duvectorundstringkennst/lernst:#include <iostream> #include <string> #include <vector> using failure = std::string; using failure_memory = std::vector<failure>; void menu(){ std::cout << "0: Fehlerspeicher ausgeben\n" "1: Batteriespannung absenken\n" "2: Schiebemechanismus blockieren\n"; } void print(const failure_memory& mem){ if(mem.empty()) std::cout << "Keine Fehler.\n"; else{ std::cout << "Fehler:\n"; for(const auto& f : mem) std::cout << f << '\n'; } } int main(){ failure_memory failures; int c=0; menu(); while(c!=-1 && std::cin>>c){ switch(c){ default: c=-1; break; case 0: print(failures); break; case 1: failures.push_back("Spannung < 10V"); break; case 2: failures.push_back("Schiebemechanismus blockiert"); break; } } }
-
Das ist der Code für die Batterie und den Fehlerspeicher im Diagnosemodus:
void Menu5() { SetConsoleTitle(L"PelloTec - Batteriesensor"); system("cls"); gotoxy(0,1); cout<<"Sie haben den Batteriesensor ausgew\x84hlt."<<endl; cout<<"\nSie k\x94 \bnnen hier eine Unterspannung der Batterie simulieren."<<endl; cout<<"\nBitte w\x84 \bhlen Sie die zu simulierende Aktion: "<<endl; cout<<"\n1. Batteriespannung ist seit \x81 \bber 30 Sekunden unter 10 Volt"<<endl; cout<<"\n2. Batteriespannung ist unter 5 Volt"<<endl; cout<<"\n3. Zur\x81 \bck ins Hauptmen\x81 \b"<<endl; char nmbr3; cout<<"\nBitte geben Sie die Zahl f\x81r die folgende Aktion ein: "; cin >> nmbr3; switch (nmbr3) { case ('1'): cout<<"\nDie Batteriespannung ist seit \x81 \bber 30 Sekunden lang unter 10 Volt.\nDas Schiebedach wird automatisch geschlossen!"; int m_zahl; for(m_zahl =10; m_zahl >=0; m_zahl--) { printf("\n%d \n ",m_zahl); Sleep (1000); } cout<<"\nDieser Schliessvorgang wurde im Fehlerspeicher eingetragen!"; std::cout<< "0: Fehlerspeicher ausgeben\n" "1: Batteriespannung absenken\n" "2: Schiebemechanismus blockieren\n"; cout<<"\n(Dr\x81 \bcken Sie eine beliebige Taste, um in das Hauptmen\x81 \b zu gelangen!)"; break; case ('2'): cout<<"\nDie Batteriespannung ist unter 5 Volt.\nDas Schiebedach muss per Notbet\x84 \btigung manuell geschlossen werden!"; cout<<"\n(Dr\x81 \bcken Sie eine beliebige Taste, um in das Hauptmen\x81 \b zu gelangen!)"; break; case ('3'): system("cls"); return (void (main)); break; default: cout<<"\nUng\x81 \bltige Eingabe! Bitte versuchen sie es erneut!"; break; } getch(); system("cls"); } void Menu6() { SetConsoleTitle(L"PelloTec - Diagnosemodus"); system("cls"); gotoxy(0,1); cout<<"Sie haben den Diagnosemodus ausgew\x84hlt"<<endl; cout<<"\nHier k\x94 \bnnen Sie alle Bet\x84 \btigungsvorg\x84 \bnge des Schiebedachs \n\x81 \bber den Diagnosetester simulieren!"<<endl; cout<<"\n(F)ehlerspeicher"<<endl; unsigned char nmbr4; cout<<"\nBitte geben Sie die Zahl f\x81 \br die folgende Aktion ein \noder 'f', um in den Fehlerspeicher zu gelangen: "; cin >> nmbr4; switch (nmbr4) { case 'F': case 'f': system("cls"); SetConsoleTitle(L"PelloTec - Fehlerspeicher"); cout<<"Sie sind nun im Fehlerspeicher."<<endl; cout<<"\nHier werden alle automatischen Schliessvorg\x84 \bnge aufgelistet."<<endl; break; default: cout<<"\nUng\x81 \bltige Eingabe! Bitte versuchen Sie es erneut!"; break; } getch(); system("cls"); }Im Batteriemodus wird ausgewählt "unter 10 Volt" und dann soll im Diagnosemodus im Fehlerspeicher erscheinen:" Batterie war unter 10 Volt(Unterspannung)"
-
Der Code ist eigentlich ohne
std::cout<< "0: Fehlerspeicher ausgeben\n" "1: Batteriespannung absenken\n" "2: Schiebemechanismus blockieren\n";einfach ausblenden

-
Habs nur überflogen - ein paar Kommentare im Quelltext
for(m_zahl =10; m_zahl >=0; m_zahl--) { printf("\n%d \n ",m_zahl); // warum hier printf? Sleep (1000); } cout<<"\nDieser Schliessvorgang wurde im Fehlerspeicher eingetragen!"; std::cout<< "0: Fehlerspeicher ausgeben\n" "1: Batteriespannung absenken\n" "2: Schiebemechanismus blockieren\n"; cout<<"\n(Dr\x81 \bcken Sie eine beliebige Taste, um in das Hauptmen\x81 \b zu gelangen!)"; break; case ('2'): cout<<"\nDie Batteriespannung ist unter 5 Volt.\nDas Schiebedach muss per Notbet\x84 \btigung manuell geschlossen werden!"; cout<<"\n(Dr\x81 \bcken Sie eine beliebige Taste, um in das Hauptmen\x81 \b zu gelangen!)"; break; case ('3'): system("cls"); return (void (main)); // ??? break; // wann wird diese Zeile abgearbietet? default: cout<<"\nUng\x81 \bltige Eingabe! Bitte versuchen sie es erneut!"; break; } getch(); system("cls"); } void Menu6() { SetConsoleTitle(L"PelloTec - Diagnosemodus"); // Welches Entwicklungstool? system("cls"); gotoxy(0,1); cout<<"Sie haben den Diagnosemodus ausgew\x84hlt"<<endl; cout<<"\nHier k\x94 \bnnen Sie alle Bet\x84 \btigungsvorg\x84 \bnge des Schiebedachs \n\x81 \bber den Diagnosetester simulieren!"<<endl; cout<<"\n(F)ehlerspeicher"<<endl; unsigned char nmbr4; cout<<"\nBitte geben Sie die Zahl f\x81 \br die folgende Aktion ein \noder 'f', um in den Fehlerspeicher zu gelangen: "; cin >> nmbr4; switch (nmbr4) { case 'F': case 'f': system("cls"); SetConsoleTitle(L"PelloTec - Fehlerspeicher"); cout<<"Sie sind nun im Fehlerspeicher."<<endl; cout<<"\nHier werden alle automatischen Schliessvorg\x84 \bnge aufgelistet."<<endl; break; default: cout<<"\nUng\x81 \bltige Eingabe! Bitte versuchen Sie es erneut!"; break; } getch(); system("cls"); }ä, ö, ü müsst ihr die so setzen? Ist ja eine sprachliche Besonderheit - soll das Auto nur in einer begrenzten Region verkauft werden? Der Quelltext ist so auch ein wenig stockend zu lesen.

Die Frage nach dem Entwicklungstool - was bietet es? Müssen da wirklich so viel system("cls") oder bietet das Entwicklungstool da eine elegantere Lösung?
-
Ist Deine Frage: "Datensatz von einem Bereich in einen anderen einfügen" damit erledigt?
Ich bezweifle das...
Bisher versteht nämlich niemand, was die Frage ist.
-
Bisher versteht nämlich niemand, was die Frage ist.
Nähmlich schreibt man mit h, meine Güte bist du dähmlich.
-
Im Grunde ist es ja egal ob man printf oder cout<< benutzt oder?
Das ganze ist ein Projekt für die Uni. Als Entwicklungstool benutzen wir Visual Studio 2012.
Ich wüsste nicht wie ich den Beitrag sonst nennen sollte.
Mein Problem ist einfach nur dass sobald ">10 Volt" gewählt wird, automatisch ein Eintrag im Fehlerspeicher-Menü entsteht.
-
also von 'void Menu5()' nach 'void Menu6()' sozusagen.
-
...
-
Aha Universität.
Wie ich Dich verstehe ist Dein Problem, dass Du nicht weisst, wie Du einen einzigen "Fehlerspeicher" an verschiedenen Stellen im Programm nutzen kannst.
Am einfachsten reichst Du den Fehlerspeicher dazu im Programm als Funktionsargument herum.Ich habe hier noch mal eine leicht abgewandelte Form meines Codes:
#include <iostream> #include <string> #include <vector> using failure = std::string; using failure_memory = std::vector<failure>; void add_blocking_failure(failure_memory& mem){ mem.push_back("Schiebemechanismus blockiert"); } void add_current_failure(failure_memory& mem){ mem.push_back("Spannung < 10V"); } void print(const failure_memory& mem){ if(mem.empty()) std::cout << "Keine Fehler.\n"; else{ std::cout << "Fehler:\n"; for(const auto& f : mem) std::cout << f << '\n'; } } void menu(){ std::cout << "0: Fehlerspeicher ausgeben\n" "1: Batteriespannung absenken\n" "2: Schiebemechanismus blockieren\n"; } int main(){ failure_memory failures; int c=0; menu(); while(c!=-1 && std::cin>>c){ switch(c){ default: c=-1; break; case 0: print(failures); break; case 1: add_current_failure(failures); break; case 2: add_blocking_failure(failures); break; } } }Oben bestimme ich erstmal, was mein Fehlerspeicher ist (Z. 5 und 6): ein
vectorvonfailures, wobeifailureseinfachestrings sind.
Im Hauptprogramm erstelle ich in Z. 34 einen Fehlerspeicher.
Es gibt dann drei Funktionen, die mit einem Fehlerspeicher arbeiten zweiadd_*_failure()und eineprint()Funktion.
Alle drei werden im Hauptprogramm aufgerufen und als Funktionsargument gebe ich immer den einen Fehlerspeicher mit, den ich in Z. 34 erstellt habe, d.h. alle drei Funktionen arbeiten mit ein und demselben Speicher.Funktionen solltest Du eigentlich schon kennen, eine Referenz für
std::vectorundstd::stringfindest Du hier: http://en.cppreference.com/w/Klar?
Eins noch: hampel nicht soviel mit der Ausgabe rum. Umlaute und Gedoens sind nice to have, lenken aber vom Wesentlichen ab.
-
zuerst mal dankeschön

aber ich bekomme beim debuggen die fehlernachrichtFehler 20 error C2065: 'failure': nichtdeklarierter Bezeichner
-
Dein Compiler nutzt offenbar kein C++11.
Schreib typedef std::string failure oder aktiviere C++11 Support.
-
radddyo schrieb:
Im Grunde ist es ja egal ob man printf oder cout<< benutzt oder?
Nein!