[C++]- eingabe mit schleife geht nicht -[C++]

  • C/C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [C++]- eingabe mit schleife geht nicht -[C++]

    hi
    ich befasse mich seit kurzen intensiv mit c++
    und habe schon viel gerätselt aber dieser code geht immer noch nicht:
    ich habe das hier includiert:

    C-Quellcode

    1. #include <iostream>
    2. #include <conio.h>
    3. #include <string>
    4. #include <windows.h>
    5. #include <math.h>

    (ein paar includierte sachen sind für was anderes ^^)
    es soll eine eingabe werden

    Quellcode

    1. //eingabe
    2. while (einzeichen[zahl]!=0x0D){
    3. einzeichen[zahl]=getch();
    4. if (einzeichen[zahl] !=0x08){
    5. ganzeingabe2+=einzeichen[zahl];
    6. zahl++;}
    7. if(ganzeingabe2.length()>0){
    8. zahl--;
    9. ganzeingabe2.resize(ganzeingabe2.length()-1);
    10. loschen();
    11. }
    12. putch(einzeichen[zahl]);
    13. }
    Alles anzeigen

    das blöde ist da kommt immer nur ein buchstabe und dann wird der andere überschrieben
    die funktion löschen sieht so aus:

    Quellcode

    1. char loschen(){
    2. putch(0x08);
    3. putch(' ');
    4. putch(0x08);
    5. return 0;
    6. }


    weis jemand wo der fehler liegt?
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • :rage: :rage2: :rage2: :rage2: :rage2: :rage2: :rage2: :rage2: :rage2:

    Hab wohl den falschen Button erwischt und statt zu zitieren hab ich den Beitrag editiert...

    Edit: Thx an Irrenhaus3 für die Reparatur. Hier meine Antwort, wie sie eigentlich gemeint war:

    Da ich nicht ganz sicher bin, was du eigentlich machen willst, sage ich dir nur, was du tust und überlasse die eigentliche Korrektur dir selbst:

    Vllt. wird dir das Problem auch schon klar, wenn ich mal etwas passender einrücke:

    C-Quellcode

    1. //eingabe
    2. while (einzeichen[zahl] != 0x0D) {
    3. einzeichen[zahl] = getch();
    4. if (einzeichen[zahl] != 0x08) {
    5. ganzeingabe2 += einzeichen[zahl]; // hier wird ganzeingabe2 um ein Zeichen verlängert; hat also eine Länge >= 1
    6. zahl++; // hier wird zahl inkrementiert
    7. }
    8. if(ganzeingabe2.length() > 0) { // offensichtlich ist durch obige verlängerung ganzeingabe2 nun lang genug, um diese Bedingung zu erfüllen
    9. zahl--; // hier wird zahl wieder dekrementiert, hat also den gleichen Wert, wie zu Beginn der Schleife
    10. ganzeingabe2.resize(ganzeingabe2.length()-1); // ganzeingabe2 wird wieder um ein Zeichen verkleinert; ist also auch wieder so lang wie vorher; d.h. das eben hinzugefügte Zeichen ist nun weg.
    11. loschen(); // hab ich nicht weiter betrachtet
    12. }
    13. putch(einzeichen[zahl]); // dito
    14. }
    Alles anzeigen


    Soll heißen: "zahl" wird nie größer und "ganzeingabe2" hat am Ende der Schleife immer die gleiche Länge, wie zu Anfang.
  • ich weis was cin ist
    aber ich möchte jeden einzelnen buchstaben verändern
    edit:
    oh das zweite if sollte else if sein
    edit2:
    nur dann kommen komische zufalls buchstaben zum eintippen
    edit3:
    hier ganzer code:

    Quellcode

    1. //eingabe
    2. while (einzeichen[zahl]!=0x0D){
    3. einzeichen[zahl]=getch();
    4. if (einzeichen[zahl] !=0x08){
    5. ganzeingabe2+=einzeichen[zahl];
    6. zahl++;}
    7. else if(ganzeingabe2.length()>0){
    8. zahl--;
    9. ganzeingabe2.resize(ganzeingabe2.length()-1);
    10. loschen();
    11. }
    12. putch(einzeichen[zahl]);
    13. }
    14. system("cls");
    15. //zufalls anzeige
    16. while (zahl1!=zahl){
    17. while (random!=einzeichen[zahl1]) {
    18. random=1 + ( rand() % 255 ) ;
    19. putch(random);
    20. Sleep(50);
    21. loschen();
    22. }
    23. Sleep(500);
    24. zahl1++;
    25. }
    26. cin.get();
    27. return 0;
    28. }
    29. //void:
    30. // Loschen
    31. char loschen(){
    32. putch(0x08);
    33. putch(' ');
    34. putch(0x08);
    35. return 0;
    36. }
    Alles anzeigen
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von husi012 ()

  • Von "ganzer Code" kann keine Rede sein, immerhin steht da noch nirgends, wie deine ganzen Variablen initialisiert sind.
    Jedenfalls: In deinem if-Block oben liest du ein Zeichen in einzeichen[zahl] ein, inkrementierst dann zahl, und gibst anschließend nach dem else-if-Block einzeichen[zahl] aus, was eine völlig andere Stelle im Speicher ist. Wenn du einzeichen nicht initialisiert hast, wird an der Stelle ausgegeben, was beim Reservieren des Speichers für dieses Array gerade an der entsprechenden Stelle im Speicher lag.

    Und bei deiner komischen Zufallsanzeige wählst du auch ständig irgendwelche Zufallszahlen und gibst sie als Zeichen aus...

    Ich verstehe also weder, was du da eigentlich versuchst, noch, was genau nun dein Problem ist.
  • man dann eben hier
    der ganze code:

    C-Quellcode

    1. #include <iostream>
    2. #include <conio.h>
    3. #include <string>
    4. #include <windows.h>
    5. #include <math.h>
    6. using namespace std;
    7. //prototypen
    8. char loschen();
    9. int main(){
    10. //deklaration
    11. char random;
    12. char einzeichen[100];
    13. string ganzeingabe2="";
    14. int zahl=0,zahl1=0;
    15. //schleifen
    16. //eingabe
    17. while (einzeichen[zahl]!=0x0D){
    18. einzeichen[zahl]=getch();
    19. if (einzeichen[zahl] !=0x08){
    20. ganzeingabe2+=einzeichen[zahl];
    21. zahl++;}
    22. else if(ganzeingabe2.length()>0){
    23. zahl--;
    24. ganzeingabe2.resize(ganzeingabe2.length()-1);
    25. loschen();
    26. }
    27. putch(einzeichen[zahl]);
    28. }
    29. system("cls");
    30. //zufalls anzeige
    31. while (zahl1!=zahl){
    32. while (random!=einzeichen[zahl1]) {
    33. random=1 + ( rand() % 255 ) ;
    34. putch(random);
    35. Sleep(50);
    36. loschen();
    37. }
    38. Sleep(500);
    39. zahl1++;
    40. }
    41. cin.get();
    42. return 0;
    43. }
    44. //void:
    45. // Loschen
    46. char loschen(){
    47. putch(0x08);
    48. putch(' ');
    49. putch(0x08);
    50. return 0;
    51. }
    Alles anzeigen
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Quellcode

    1. while (einzeichen[zahl]!=0x0D){


    Erstens würde ich dir nicht raten ein Array zu überprüfen in dem nichts gespeichert worden ist. Das kann zu Problemen und Bugs führen. Zweitens wird meines Wissens nach nicht 0x0D zurückgegeben, wenn du Enter drückst. Das heißt die Schleife wird endlos lang laufen, bis das Programm sich aufhängt.

    Quellcode

    1. ganzeingabe2+=einzeichen[zahl];


    Quellcode

    1. ganzeingabe2.resize(ganzeingabe2.length()-1);


    Ich würde einzeichen am Ende einfach eine 0 anhängen und dann "ganzeingabe2 = einzeichen;" schreiben.

    Hier noch ein Beispiel, wie ich den String eingelesen hätte:

    Quellcode

    1. char buffer[128];
    2. int pos = 0;
    3. do {
    4. buffer[pos] = getchar();
    5. pos++;
    6. }
    7. while (buffer[pos - 1] != 0x0A);
    8. buffer[pos - 1] = 0;


    Ich hoffe ich konnte dir helfen. Wenn ich etwas falsch habe bitte nicht böse sein. Konsolenanwendungen liegen mir einfach nicht so ;)

    LG Kebaplover
  • ah also ich habe
    dank deiner hilfe ein besseres ergebniss mit dem code:(nur von main)

    Quellcode

    1. int main(){
    2. //deklaration
    3. char random;
    4. char einzeichen[100];
    5. string ganzeingabe2="";
    6. int zahl=0,zahl1=0;
    7. //schleifen
    8. //eingabe
    9. while (einzeichen[zahl-1]!=0x0D){
    10. einzeichen[zahl]=getch();
    11. if (einzeichen[zahl] !=0x08){
    12. ganzeingabe2+=einzeichen[zahl];
    13. zahl++;}
    14. else if(ganzeingabe2.length()>0){
    15. zahl--;
    16. ganzeingabe2.resize(ganzeingabe2.length()-1);
    17. loschen();
    18. }
    19. putch(einzeichen[zahl-1]);
    20. }
    21. system("cls");
    22. //zufalls anzeige
    23. while (zahl1!=zahl){
    24. while (random!=einzeichen[zahl1]) {
    25. random=1 + ( rand() % 255 ) ;
    26. putch(random);
    27. Sleep(50);
    28. loschen();
    29. }
    30. putch(random);
    31. Sleep(500);
    32. zahl1++;
    33. }
    34. cin.get();
    35. return 0;
    36. }
    Alles anzeigen

    nur das dann dieses ergebniss raus kommt:
    h
    i

    und dann läuft der trozdem noch weiter
    aber es geht halbwegs
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Benutzer online 1

    1 Besucher