cin wird übersprungen
-
Ne nicht ganz ohne

Vieles habe ich natürlich nicht (Noch nicht).Der dynamische speicher soll den int den wert geben, und der int soll das dann zusammen rechnen bzw verarbeiten.
Wenn der int eine fehleingabe bekommt, was zum cin fehler anscheind führ, dann soll er halt den int auf 0 zurück setzen, und den cin ja clearen, damit die eingabe wiederholbar ist, und das nicht zu einer schleigfe kommt.
Deswegen habe ich ja hier geschrieben, warum de cin übersprungen wird, aber das weiß ich ja jetzt warum, bloß wie ich es jetzt gut löse ist jetzt die frage, mit clear geht das zwar, bloß meintest du das es nicht ausreicht.
Und das nicht ausreicht ist jetzt mein Problem, da es bei mir nicht klapt

-
b4nan1 schrieb:
Der dynamische speicher soll den int den wert geben, und der int soll das dann zusammen rechnen bzw verarbeiten.
Wenn der int eine fehleingabe bekommt, was zum cin fehler anscheind führ, dann soll er halt den int auf 0 zurück setzen, und den cin ja clearen, damit die eingabe wiederholbar ist, und das nicht zu einer schleigfe kommt.
Ich versteh kein Wort.
Beschreib mal auf Deutsch, ohne zu versuchen, Programmierfachjargon zu benutzen.
-
Ok,
Es wird ja eine Eingabe erwartet die er ja auch bearbeitet sprich auch rechnet (deswegen int).
Das ganze wird dann per fstream in einer datei gespeichrt und fertig.
Wenn du aber jetzt bei der eingabe ein großen wert reinschreibst der größer ist als int aufnehmen kann, dann kommt es zur einer schleife, da die abfrage fehgeschlagen ist (die ich noch stelle), und die eingabe soll wiederholt werden.
Bloß überspringt er den cin befehl, wenn ich nicht clear hätte, da es ja zum fehler führt.Die Werte brauche ich nur am anfagn des Programms, und wenn die richtig sind, holt er die sich ja aus der Datei die ich zuvor angelgt habe (per programm).
Die schleife will ich ja beenden was ja mit clear klapt, aber du meinst es reicht ja nicht.
PS:
Er soll einfach damit rechnen und wieder vergessen, aber im laufe des programms kommen noch andere eingaben, vieleicht kommt es dann da zum fehler?mfg
-
Hier mal der Source-Code:
int *key1 = new int; int *key2 = new int; int *key3 = new int; int *key4 = new int; *key1 = NULL; *key2 = NULL; *key3 = NULL; *key4 = NULL; // Clear CIN if (!std::cin) { std::cin.clear (); // std::cin.ignore (std::numeric_limits<std::streamsize>::max (), '\n'); } // Eingabe std::cin >> (int)*key1 >> (int)*key2 >> (int)*key3 >> (int)*key4; keyblock1 = *key1; keyblock2 = *key2; keyblock3 = *key3; keyblock4 = *key4; if (eingabech (keyblock1, keyblock2, keyblock3, keyblock4) == true) { keytemp = 0; keytemp = keyblock1 + keyblock2; keytemp += keyblock3; keytemp -= keyblock4; } savekey (); // Speicher Löschen delete key1; delete key2; delete key3; delete key4; key1 = 0; key2 = 0; key3 = 0; key4 = 0; // Lösche Keyblock keyblock1 = NULL; keyblock2 = NULL; keyblock3 = NULL; keyblock4 = NULL; if (keytemp == OK) return true; else return false; } bool eingabech (int keyblock1, int keyblock2, int keyblock3, int keyblock4) { if (keyblock1 > 00000 && keyblock2 > 00000 && keyblock3 > 00000 && keyblock4 > 00000 || keyblock1 == 0 && keyblock2 == 0 && keyblock3 == 0 && keyblock4 == 1) return true; else return false; }Der Checkt, und wenn das net passt schickt er dich hier rein. (mit for schleife)
-
SeppJ
Kannst du mir nun sagen, ob ich es brauche für meine Awendung oder nicht?

mfg
-
Ich weiß immer noch nicht, was das Programm überhaupt tun soll. Du würdest wohl selbst Microsoft Word so in dieser Art beschreiben:
"Es wird ja eine Eingabe erwartet die er ja auch bearbeitet. Der dynamische speicher soll den char den wert geben, und der char soll das dann zusammen verarbeiten. Das ganze wird dann per fstream in einer datei gespeichrt und fertig. "
-
...
-
jaahaaa ist klar das dir das so wie es da steht komisch vor kommt, genauso wie mir es komisch vor kommen wurde.
Ja dynamische speicher damit habe ich weig.. was getestet was ich noch net weg gemacht habe.
Oben die auf 0 setzen hat mit einer anderen funktion zu tun, weil er da nochmal rein kommen kann.
Und wie gesagt, bin noch Anfänger... wenns danach geht, könnte ich mein ganzes zeug umschreiben (bzw besser) da ich jett eiwder mehr weiß als ich damit angefangen hab

PS: das sind nicht alle funktionen :), es ging ja um meine frage bzw das clearen von (cin).
-
...
-
// HEADER // // INCLUDE #include "stdafx.h" #ifndef AKTIVIEREN_H #define AKTIVIEREN_H class aktivieren { private: std::string aktivs; bool aktivS; public: void erstellestring () { if (aktivS == true) aktivs = "-> Aktiviert!"; else aktivs = "-> Nicht Aktiviert!"; } void aktiv () { aktivS = true; } void naktiv () { aktivS = false; } void zeige () { std::cout << aktivs; } void demo () { aktivs = "-> Demo!"; } bool a () { if (aktivS == true) return true; else return false; } }; // INSTACE extern aktivieren Aktiv; #endif // CPP // #define OK 86051 unsigned int keyblock1, keyblock2, keyblock3, keyblock4 = 0; int keytemp = 0; std::fstream keyfile; // Serial - Aktivieren bool serialkey () { // Dynamischer Speicher (KEY) int *key1 = new int; int *key2 = new int; int *key3 = new int; int *key4 = new int; *key1 = NULL; *key2 = NULL; *key3 = NULL; *key4 = NULL; // Clear CIN if (!std::cin) { std::cin.clear (); // std::cin.ignore (std::numeric_limits<std::streamsize>::max (), '\n'); } // Eingabe std::cin >> (int)*key1 >> (int)*key2 >> (int)*key3 >> (int)*key4; keyblock1 = *key1; keyblock2 = *key2; keyblock3 = *key3; keyblock4 = *key4; if (eingabech (keyblock1, keyblock2, keyblock3, keyblock4) == true) { keytemp = 0; keytemp = keyblock1 + keyblock2; keytemp += keyblock3; keytemp -= keyblock4; } savekey (); // Dynamischer Speicher Löschen delete key1; delete key2; delete key3; delete key4; key1 = 0; key2 = 0; key3 = 0; key4 = 0; // Lösche Keyblock keyblock1 = NULL; keyblock2 = NULL; keyblock3 = NULL; keyblock4 = NULL; if (keytemp == OK) return true; else return false; } bool eingabech (int keyblock1, int keyblock2, int keyblock3, int keyblock4) { if (keyblock1 > 00000 && keyblock2 > 00000 && keyblock3 > 00000 && keyblock4 > 00000 || keyblock1 == 0 && keyblock2 == 0 && keyblock3 == 0 && keyblock4 == 1) return true; else return false; } bool checkserial () { if (keyfile) { keyfile.open("uksdac.dat",std::ios::in); keyfile >> keyblock1; keyfile >> keyblock2; keyfile >> keyblock3; keyfile >> keyblock4; keyfile.close (); keytemp = 0; keytemp = keyblock1 + keyblock2; keytemp += keyblock3; keytemp -= keyblock4; } if (keytemp == OK) return true; else return false; } void serial () { int x = 0; while (x == 0) { if (checkserial () == true || demo () == true) { x = 1; Aktiv.aktiv (); savekey (); if (demo () == true) { Aktiv.demo (); savekey (); } else { Aktiv.erstellestring (); savekey (); } } else { Aktiv.naktiv (); serialkey (); } } } void savekey () { keyfile.open("uksdac.dat", std::ios::out); keyfile << keyblock1 << std::endl; keyfile << keyblock2 << std::endl; keyfile << keyblock3 << std::endl; keyfile << keyblock4 << std::endl; keyfile.close (); } bool demo () { if (keyblock1 == 0 && keyblock2 == 0 && keyblock3 == 0 && keyblock4 == 1) return true; else return false; }Das soll sowas wie ein Key sein.
Ich weiß das die eig.. anders Funktionieren, aber ok
PS: Ich bin immer noch Anfänger
