Anfänger frage zu einer IF abfrage



  • zahl = number[4]; wird das nicht damit befüllt?Ich weiß es nicht genau wie du ja weißt bin ich anfänger und der code so wie ich ihn gepostet hab geht ohne probleme. Daher weiß ich jetzt nicht genau was der fehler von eurer seite aus ist. Ich hab verstanden das ein paar schreibweißen nicht optimal sind und daher versuche ich auch weiterhin herrauszulesen was ihr meint.



  • Baldry schrieb:

    zahl = number[4]; wird das nicht damit befüllt?

    Nein, da weist du das fünfte Element von number an zahl zu.

    edit: Wobei number nur vier Elemente hat und die vorher keinen Wert zugewiesen bekommen haben.

    und der code so wie ich ihn gepostet hab geht ohne probleme.

    Nein, tut er nicht.

    ~ % ./something
    Willkommen in meiner "Quersummenausrechnung" 
    
    Sie muessen eine 4-stellige Zahl eingeben damit es funktioniert!
    
    Bitte geben sie eine 4-stellige Zahl ein: 2134
    Die eingegebene Zahl lautet 2134
    
    Die Quersumme lautet: 29
    ~ % ./something
    Willkommen in meiner "Quersummenausrechnung" 
    
    Sie muessen eine 4-stellige Zahl eingeben damit es funktioniert!
    
    Bitte geben sie eine 4-stellige Zahl ein: 2134
    Die eingegebene Zahl lautet 2134
    
    Die Quersumme lautet: -36
    


  • Btw, zum Array-Zugriff generiert mein Compiler sogar ein hübsches Warning. Deiner etwa nicht?

    clang++ -o something something.cpp
    something.cpp:22:14: warning: array index 4 is past the end of the array (which contains 4 elements) [-Warray-bounds]
          zahl = number[4]; 
                 ^      ~
    something.cpp:18:3: note: array 'number' declared here
      char number[4]; 
      ^
    1 warning generated.
    


  • Ok du hast recht Ich hatte es mit 2 verschiedenen zahlen probiert und bei beiden kam eine positive zahl raus und ich hab gedacht das wäre soweit richtig dann. lag ich wohl falsch, ich werde versuchen mal rauszufinden wie ich die einzelnden ziffern in ein array bekomme. Danke für die hilfe!

    EDIT: nein tut er nicht.



  • nman schrieb:

    nman schrieb:

    Abgesehen davon: Du befüllst number nirgends. Und selbst wenn du das machen würdest: number ist ein char-Array. Das kannst du zwar zu int konvertieren, aber das macht garantiert nicht das, was du möchtest.

    Probier doch mal das hier aus und sag mir, was dir auffällt:

    #include <iostream>
    
    int main() {
      char number[4] = { '1', '2', '3' };
      int one = number[0];
      int two = number[1];
      int three = number[2];
      std::cout << one << " "
                << two << " "
                << three << std::endl;
    }
    

    Ahh ich glaub ich verstehe was du meinst, die zahlen werden nicht als zahl übergeben sondern als ascii. daher sind die zahlen die ich eingebe immer falsch weil andere zahlen ankommen.
    nun bin ich aber ziehmlich verwirrt und weiß nicht was ich machen soll 😞

    EDIT: Das problem ist ja das ich versuche Zahl(als ganzes also int) in ein array zu speichern(einzelnde ziffern) so das krieg ich nicht hin schonmal. das 2 problem ist das nicht die zahlen übergeben werden sondern der ascii code (also 1=49 2=50 usw) diese muss ich ja dann wieder umwandeln.



  • Jung ich hab dir doch geschrieben wie man etwas zuweist!

    Wo ist der unterschied?

    #include <iostream>
    
    int main(){
      int zahl = 1;
      char number[1] = { '0' };
      zahl = number[0];
      std::cout << "number: " << number[0] << "zahl: " << static_cast<char>(zahl) << '\n';
    
      //und jetzt mal anders herum:
      zahl = 1;
      number[0] = zahl;
      std::cout << "number: " << static_cast<int>(number[0]) << "zahl: " << zahl << '\n';
    }
    

    EDIT: So sry nun ist schöner. static_cast<int/char>() macht nur das du in der Ausgabe dann auch zahlen siehst. Nicht wie von dir beschrieben ascii. 🙂



  • Baldry schrieb:

    Ahh ich glaub ich verstehe was du meinst, die zahlen werden nicht als zahl übergeben sondern als ascii. daher sind die zahlen die ich eingebe immer falsch weil andere zahlen ankommen.

    Nein, die Zahlen sind immer falsch, weil du auf den falschen Speicherbereich zugreifst.

    Die ASCII-Geschichte behebst du ja mit dem seltsamen "-4*48"-Hack auf der ersten Seite.

    Aber du brauchst überhaupt keine char-Arrays dafür, die Quersumme kannst du auch bequemer ermitteln, ungefähr so z.B. (ungetestet):

    unsigned quersumme(unsigned zahl) {
        unsigned quersumme = 0;
        while (zahl > 0) {
            quersumme += zahl % 10;
            zahl /= 10;
        }
        return quersumme;
    }
    


  • Seine Aufgabe ist doch aber das er was mit einem Array machen soll, wenn ich das richtig verstand habe.



  • Fuchs aus dem Wald schrieb:

    Seine Aufgabe ist doch aber das er was mit einem Array machen soll, wenn ich das richtig verstand habe.

    Die Lösung ist trotzdem schlecht.

    Unabhängig davon wäre es vmtl. besser, wenn er in einem halbwegs brauchbaren Grundlagenbuch nachliest. Er hat keine Ahnung, wie man Werte zuweist und Elemente in einem Array adressiert. Da hilft Trial & Error nicht.



  • Da hast du recht. 🙂 Aber das sollten die beim Praktikum eigentlich wissen. Oder er verkauft sich überm Preis. 😉



  • Ok danke euch nochmal, war leider krank daher war ich die letzten tage nicht hier.
    Ich arbeite mit C++ erst seid kurzem und auch wenn ich was schonmal gesehen habe heißt das nicht das ich es auf anhieb 100% kann 😃 Ich werde mich aufjeden fall mehr mit arrys und variabeln befassen.


Anmelden zum Antworten