Klasse ValueGets: Fehler!



  • CStoll schrieb:

    PS: Wenn du dir nicht helfen lassen willst, sag Bescheid, dann kann ich hier dicht machen.

    Hey, ich finde er gibt sich wirklich Mühe! Auch wenn er nicht richtig erklären kann, was da nun vor sich geht und was nicht 🤡

    Darf ich mal raten, dass der vector<char> eine Art Spielfeld ist? Der Benutzer, der dran ist, gibt zwei Zahlen ein, Indizes des Vektors. Wenn der char-Wert beim ersten Index ein bestimmter Buchstabe ist (hier ASCII-Code 1), dann kann passiert irgendwas mit dem Wert beim zweiten Index.
    Vielleicht solltest du das Verfahren mit Worten beschreiben. Also z.B. das Spielprinzip - ich denke es wird schon keiner klauen 😉 Beim Beschreiben mit Worten solltest du dann von Funktionen, Referenzen usw loskommen und z.B. beschreiben, wie der Benutzer, der das Programm startet, es bedienen muss und was der Zweck des Programms ist.

    Dein Fehler liegt eindeutig in der Logik, wo du irgendwo falsch gedacht hast. Logikfehler lassen sich halt nur beheben, wenn man die Funktionsweise des Programmes versteht, was es wann tun soll, und vor allem warum.
    Wie ich das sehe, verstehen weder CStoll noch ich, wie, was, wo und warum genau irgendwo irgendwas passieren soll. Und deshalb bräuchten wir eine Beschreibung 😉



  • Badestrand schrieb:

    CStoll schrieb:

    PS: Wenn du dir nicht helfen lassen willst, sag Bescheid, dann kann ich hier dicht machen.

    Hey, ich finde er gibt sich wirklich Mühe! Auch wenn er nicht richtig erklären kann, was da nun vor sich geht und was nicht 🤡

    Ja, er gibt sich Mühe, aber er redet um den heißen Brei herum. Und wenn ich jede Frage zehnmal wiederholen muß, bevor ich eine verwertbare Antwort bekomme, verliere ich irgendwann auch die Geduld.



  • CStoll schrieb:

    **Was für ein Wert steht vor dieser if()-Abfrage in free[first]?
    **

    Hi CStoll

    es ist ziemlich schwer zu erklären(also für mich), aber ich versuchs nun besser zu machen 😞

    "first" ist ja eine Zahl, zbsp. 3 und free vom typ char(ist ein Vektor) enthält viele ASCII Zeichen.

    A B C D E F G H I J  K  L  M 
    0 1 2 3 4 5 6 7 8 9 10 11  12   ... Elemente
    

    Da ich nun 3 als first habe, bewegt sich der Buchstabe C von da nach last aber nur im Index des Vektors. Wenn last 11 wäre, würd L D sein und es würde so aussehen:

    A B C D E F G H I J  K  C  M 
    0 1 2 3 4 5 6 7 8 9  10 11 12   .. Elemente
    

    So mein ich das 😉

    Aber den genauen Wert vor der IF-Anweisung kann man ja nicht sagen, was der eine Grund wäre,dass der Benutzer erst bestimmen muss von wo es bis nach geht(Durch Eingabe von first und last).

    Mein Vektor, std::vector<char> free(10, ' '); mach ich mal leer, dann tu ich manuell alle Ascii zeichen einfügen:

    unsigned char smiley = 1; // ASCII-Smiley
    unsigned char smiley2 = 2; // anderes Smiley
    // andere möglichen ASCII Zeichen
    
    free[0] = smiley;
    free[1] = smiley2;
    free[2] = smiley;
    free[3] = smiley2;
    free[4] = smiley;
    free[5] = smiley2;
    free[6] = smiley;
    free[7] = smiley2;
    free[8] = smiley;
    free[9] = smiley2;
    

    Dann schaut es so aus:

    A B A B A B A B A B 
    0 1 2 3 4 5 6 7 8 9
    

    A ist Smiley
    B ist Smiley2

    in der If-Anweisung vergleiche ich dann ob free[first] dem entspricht, mit dem man sich als einziges Bewegen kann:

    if(free[first] == A) // ist der Anfangsschritt gleich dem von mir erlaubten?
    {
        //..
    }
    

    Mit freundlichen grüssen
    thomas w.



  • GFGF schrieb:

    Aber den genauen Wert vor der IF-Anweisung kann man ja nicht sagen, was der eine Grund wäre,dass der Benutzer erst bestimmen muss von wo es bis nach geht(Durch Eingabe von first und last).

    Mag sein, daß man den Wert nicht aus der Programmlogik ermitteln kann (soviel sehe ich ja ein), aber du wirst doch wohl nachsehen können, was da drin steht 😉

    (auf deutsch: setz' mal ein cout<<"vor dem if():"<<(int)free[first]<<"/"<<(int)abc<<endl; vor die if-Abfrage und schau nach, ob da zwei identische Werte rauskommen - alternativ könntest du auch lernen, mit dem Debugger umzugehen)



  • achso.. da kommen immer ASCII Zeichen raus. Hier kann man leider keine ausgeben lassen, aber es sind halt verschiedene. Je nach welche Zahl ich eingebe.
    Aber es ist auf jeden Fall korrekt:

    std::cout << "Start(free[first]): " << free[first] << "  First: " << first;
    

    Es wird auch das richtige ausgegeben.



  • dernichtswissende schrieb:

    achso.. da kommen immer ASCII Zeichen raus. Hier kann man leider keine ausgeben lassen, aber es sind halt verschiedene. Je nach welche Zahl ich eingebe.
    Aber es ist auf jeden Fall korrekt:

    std::cout << "Start(free[first]): " << free[first] << "  First: " << first;
    

    Es wird auch das richtige ausgegeben.

    caste die Ausgaben mal in einen int, dann siehst du die ASCII-Codes anstelle der Zeichen (ist mitunter einfacher zu unterscheiden).



  • CStoll schrieb:

    dernichtswissende schrieb:

    achso.. da kommen immer ASCII Zeichen raus. Hier kann man leider keine ausgeben lassen, aber es sind halt verschiedene. Je nach welche Zahl ich eingebe.
    Aber es ist auf jeden Fall korrekt:

    std::cout << "Start(free[first]): " << free[first] << "  First: " << first;
    

    Es wird auch das richtige ausgegeben.

    caste die Ausgaben mal in einen int, dann siehst du die ASCII-Codes anstelle der Zeichen (ist mitunter einfacher zu unterscheiden).

    Hallo CStoll wieder 😉

    also hab mit

    std::cout << static_cast<int>(free[first]) << std::endl;
    

    mal gecastet. Es kommt immer nur der ASCII Code(Integer) vom jeweiligen und dazu noch richtigen ASCII-Zeichen(was der "Benutzer" auch verlangt) als Ergebnis heraus.

    mFG



  • sorry für doppelpost:

    also wenn das Feld gerade ein Smiley ist(zbsp.: ASCII Code "1" = Smiley) und ich dann caste, dann kommt nur 1 raus, was das richtige Ergebnis ist. Nur verstehe ich nicht, wieso das nicht funktioniert(die If-Anweisung) 😞

    mit freundlichen grüssen,
    thomas

    P.S.: ich hab auch vector<char> ... in vector<unsigned char> geschrieben, hat aber leider auch nichts gebracht 😞



  • Was funktioniert denn an der if-Bedingung nun nicht? Wie sind die Eingangswerte und was wird verglichen?



  • Badestrand schrieb:

    Was funktioniert denn an der if-Bedingung nun nicht? Wie sind die Eingangswerte und was wird verglichen?

    Es wird verglichen ob free[first] ein bestimmtest ASCII Zeichen ist.



  • dernichtswissende schrieb:

    also wenn das Feld gerade ein Smiley ist(zbsp.: ASCII Code "1" = Smiley) und ich dann caste, dann kommt nur 1 raus, was das richtige Ergebnis ist. Nur verstehe ich nicht, wieso das nicht funktioniert(die If-Anweisung) 😞

    Und was funktioniert denn nun nicht an der if-Bedingung?
    Die sieht doch glaubich so aus:

    if(free[first] == A)
    

    Was soll daran nicht funktionieren? Du hast dir doch free[first] und first ausgeben lassen... Wo liegt dann das Problem?

    Oder lass es mich anders formulieren: Du willst ja, dass wir dir bei einem Problem helfen (was ja gut ist, dafür ist das Forum ja da). Nur ich verstehe das Problem nicht. Du hast im Prinzip eine Bedingung "if ( x == y )" und du sagst "sie funktioniert nicht". Ich verzweifle langsam 😞



  • Badestrand schrieb:

    dernichtswissende schrieb:

    also wenn das Feld gerade ein Smiley ist(zbsp.: ASCII Code "1" = Smiley) und ich dann caste, dann kommt nur 1 raus, was das richtige Ergebnis ist. Nur verstehe ich nicht, wieso das nicht funktioniert(die If-Anweisung) 😞

    Und was funktioniert denn nun nicht an der if-Bedingung?
    Die sieht doch glaubich so aus:

    if(free[first] == A)
    

    Was soll daran nicht funktionieren? Du hast dir doch free[first] und first ausgeben lassen... Wo liegt dann das Problem?

    Oder lass es mich anders formulieren: Du willst ja, dass wir dir bei einem Problem helfen (was ja gut ist, dafür ist das Forum ja da). Nur ich verstehe das Problem nicht. Du hast im Prinzip eine Bedingung "if ( x == y )" und du sagst "sie funktioniert nicht". Ich verzweifle langsam 😞

    also erstmal dankeschön 😉

    also das sie einfach ignoriert wird, hätte ich besser sagen sollen.
    Also wenn meine "Auswahl" also in dem Sinne first ist, dann muss ich vergleichen, ob die Auswahl ein bestimmtes Zeichen ist 😉
    Aber ich glaube es hängt vom Gültigkeitsbereich irgendwie ab, ist nur so ein Gedanke 😞

    ich teste mal ob es mit normalen Buchstaben geht 😉


Anmelden zum Antworten