[OT] Spielwiese für Hacker und PI (was: was mache ich falsch)



  • florii schrieb:

    ich arbeite zur Zeit ein C++ Buch durch und steh noch ganz am Anfang.
    ...

    [...alle variablen am anfang definiert...]
    [...printf...]
    [...scanf...]
    

    (meine Betonung)

    Wenn Du ganz am Anfang stehst, hast Du ja noch Gelegenheit, Dir ein besseres Buch zu besorgen; denn das, was Du da im Moment hast, scheint Dir kein C++ sondern "C mit #include <iostream> und using namespace std;" beizubringen.



  • Bitte nächstes Mal auch den Thread Du brauchst Hilfe? beachten. Im Bezug auf Threadtitel, C++-Tags und Problembeschreibung kannst du dich noch verbessern 🙂



  • O, nein ich hab grad erst jetzt gecheckt was eigentlich dieses "1 oder eine andere Zahl" heißt (hab es mir vorher nie richtig angesehen, ich dachte da steht 1 für Ja und 0 für Nein, das hab ich ja schon sehr oft gesehen) - natürlich ist die Abfrage falsch (war ein Schreibfehler). Tut mir sehr leid, nächstes mal werd' ich genauer lesen 🙂

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
        cout<<" Wollen Sie Die Adresse des Computernutzers wissen?\n Falls JA dr\201cken Sie 1\n falls Nein eine andere Zahl\n";
    
        int a(0);
    
        cin>>a;
    
        if (a == 1)
            cout<<" max musterman \n schillerstra\341e 9 \n 999999 alaska\n";
    
        cout<<"Vielen Dank !"<<endl;
        system("pause");
    }
    

    Das dürfte ein Anfänger verstehen.



  • @Hacker: Da fehlt noch ein return . Außerdem schon wieder dieses unschöne system("pause") .



  • ProgChild schrieb:

    @Hacker: Da fehlt noch ein return .

    Das ist bei main() nicht nötig – steht es nicht, entspricht es einem return 0; am Ende von main() .



  • Hacker schrieb:

    #include <cstdlib>
    

    Buuuuh!

    Hacker schrieb:

    using namespace std;
    

    Buuuuh!

    Hacker schrieb:

    int a(0);
    

    Buuuuh!

    Hacker schrieb:

    system("pause");
    

    Buuuuh!

    Noch dazu ist alles hässlich. Tu uns allen einen Gefallen und verschone uns mit deinem Code.



  • Nein nein nein stopp.

    using namespace std;
    

    wegen einem Rat aus der vorherigen Seite.

    system("pause")
    
    #include <cstdlib>
    

    hab ich auch nicht gern(ich nutze es ja selbst auch nie), ich hab es nur dagelassen weil flori es auch genutzt hat und cin.get() für Sie noch zu "fortgeschritten" sein scheint.

    und was ist an

    int a(0);
    

    so schlimm ? Der Bezeichner ?

    Sag mal was, anstatt nur die ganze Zeit zu Buuhen. 👎
    Der Code ist, wie gesagt (und von dir ignoriert), so konstruiert das jemand wie flori ihn verstehen kann.

    Und was genau war daran hässlich ?



  • 314159265358979 schrieb:

    Hacker schrieb:

    using namespace std;
    

    Buuuuh!

    Nix da. Das ist gut und richtig so. Nur weil es nicht DEIN Stil ist, heisst es nicht, dass es schlecht oder falsch ist. Hier siehst du sogar ein Paradebeispiel für richtige Benutzung. Nebenbei Buuhst du ihn dafür aus, nachdem er darauf hingewiesen wurde, dass es GENAU SO wie es jetzt ist lesbarer ist. Du stehst also mit deiner Meinung ziemlich alleine da.

    Hacker schrieb:

    int a(0);
    

    Buuuuh!

    Auch das ist völlig in Ordnung so. Man könnte sogar behaupten, dass dies pre C++0x eine der besten Generalisierungen zur Erzeugung von einzelnen Variablen ist (du würdest auch immer T a(0) schreiben, wenn T ein beliebiges Template ist und nicht T a = 0)

    Und hässlich ist der Code auch nicht. Nur ein wenig zu viele Leerzeilen, aber das wird sich schon geben. Ich fürchte, dass es für einen Anfänger so auch einfacher zu erfassen ist, weil der Code nicht wie ein kryptischer Block aussieht.

    Lass mal endlich diese Kinderkacke sein. Dein Templateschwachsinn ist auch nicht besser. Verschone uns einfach mit deinen nervigen rants, die nichts, aber auch gar nichts beitragen.



  • otze schrieb:

    Man könnte sogar behaupten, dass dies pre C++0x eine der besten Generalisierungen zur Erzeugung von einzelnen Variablen ist

    Könnte man zwar, aber deswegen diese Schreibweise generell zu bevorzugen, wäre doch ein wenig übertrieben.



  • otze schrieb:

    Nix da. Das ist gut und richtig so. Nur weil es nicht DEIN Stil ist, heisst es nicht, dass es schlecht oder falsch ist. Hier siehst du sogar ein Paradebeispiel für richtige Benutzung. Nebenbei Buuhst du ihn dafür aus, nachdem er darauf hingewiesen wurde, dass es GENAU SO wie es jetzt ist lesbarer ist. Du stehst also mit deiner Meinung ziemlich alleine da.

    Ich habe nichts gegen using namespace; aber für was soll denn das ein Paradebeispiel sein? "Globalisierung" des Namensraums wegen einer Funktion? Generell gilt: man sollte den Zugang zum Namensraum möglichst nur auf die Funktionen beschränken, die es auch brauchen.

    Zur Initialisierung mit int a(0); :
    dies ist zwar keine weit verbreitete Schreibweise, aber sie ist C++ pur und definitiv akzeptabel. IMO ist jedoch die von C stammende Schreibweise zu bevorzugen, da auf diese Weise für das menschliche Auge schneller ersichtlich wird, dass es sich um eine Initialisierung handelt.



  • [Rewind] schrieb:

    Ich habe nichts gegen using namespace; aber für was soll denn das ein Paradebeispiel sein? "Globalisierung" des Namensraums wegen einer Funktion?

    Es ging nur darum, florii nicht zu irritieren. Um nix anderes. Hier ist allen völlig klar, dass man das auch "sauberer", bzw. anders machen könnte.



  • otze schrieb:

    Nix da. Das ist gut und richtig so. Nur weil es nicht DEIN Stil ist, heisst es nicht, dass es schlecht oder falsch ist. Hier siehst du sogar ein Paradebeispiel für richtige Benutzung.

    Natürlich ist das schlecht. using namespace XY ist immer schlecht. Alleine aus Konsistenzgründen. Und brauchst du alles aus dem std-namespace? (Ich tippe jetzt einfach mal auf nein.) Und wenn du zu faul bist, std:: dranzuschreiben, dann nimm using std::XY;.

    otze schrieb:

    Auch das ist völlig in Ordnung so. Man könnte sogar behaupten, dass dies pre C++0x eine der besten Generalisierungen zur Erzeugung von einzelnen Variablen ist (du würdest auch immer T a(0) schreiben, wenn T ein beliebiges Template ist und nicht T a = 0)

    Nein, das ist nicht in Ordnung. Der Anfänger wird sich fragen, wieso da kein = ist. Aber wenn du so auf "Generalisierung" bist, wieso nimmst du dann nicht immer {}? Geht doch nun bei allem. Die Initialisierung ist übrigens sowieso unnötig.

    otze schrieb:

    Und hässlich ist der Code auch nicht. Nur ein wenig zu viele Leerzeilen, aber das wird sich schon geben.

    Die Leerzeilen sind gar nicht mal der Kritikpunkt. Seine Leertaste ist wohl kaputt oder so.

    otze schrieb:

    Dein Templateschwachsinn ist auch nicht besser.

    Welcher Templateschwachsinn?

    Edit: Sorry, ganz vergessen. endl ist natürlich auch Mist.

    Hier mal ne verbesserte Version...

    #include <iostream>
    
    int main()
    {
        // So lokal wie möglich halten.
        using std::cin;
        using std::cout;
    
        // Konstanten sind sexy. Ob die Nummern stimmen, weiß ich gerade nicht. Das zweite erzeugt vermutlich einen Überlauf.
        char const ue = '\201';
        char const sz = '\341';
    
        // Leerzeichen sind nicht böse, Zeilenumbrüche bei Ausgaben könnte man auch in mehrere Codezeilen schreiben.
        cout << "Wollen Sie Die Adresse des Computernutzers wissen?\n"
             << "Falls Ja dr" << ue << "cken Sie 1\n"
             << "Falls Nein eine andere Zahl\n";
    
        // Initialisierung unnötig.
        int entered;
        cin >> entered;
    
        if(entered == 1)
        { // Blöcke kann man auch hinzufügen.
            cout << "Max Musterman\n"
                 << "Schillerstra" << sz << "e 9\n"
                 << "999999 alaska\n";
        }
    
        cout << "Vielen Dank!\n";
        cin.get(); // Wie auch immer. Alles ist besser als system(). Sogar getch oder kbhit.
    }
    


  • 314159265358979 schrieb:

    otze schrieb:

    Auch das ist völlig in Ordnung so. Man könnte sogar behaupten, dass dies pre C++0x eine der besten Generalisierungen zur Erzeugung von einzelnen Variablen ist (du würdest auch immer T a(0) schreiben, wenn T ein beliebiges Template ist und nicht T a = 0)

    Nein, das ist nicht in Ordnung. Der Anfänger wird sich fragen, wieso da kein = ist.

    [...]

    Hier mal ne verbesserte Version...

    #include <iostream>
    
    int main()
    {
        // So lokal wie möglich halten.
        using std::cin;
        using std::cout;
    
        // Konstanten sind sexy.
        wchar_t const ue = '\201';
        wchar_t const sz = '\341';
    
        // Leerzeichen sind nicht böse, Zeilenumbrüche bei Ausgaben könnte man auch in mehrere Codezeilen schreiben.
        cout << "Wollen Sie Die Adresse des Computernutzers wissen?\n"
             << "Falls Ja dr" << ue << "cken Sie 1\n"
             << "Falls Nein eine andere Zahl\n";
    
        // Initialisierung unnötig.
        int entered;
        cin >> entered;
    
        if(entered == 1)
        { // Blöcke kann man auch hinzufügen.
            cout << "Max Musterman\n"
                 << "Schillerstra" << sz << "e 9\n"
                 << "999999 alaska\n";
        }
    
        cout << "Vielen Dank!\n";
        cin.get(); // Wie auch immer. Alles ist besser als system(). Sogar getch oder kbhit.
    }
    

    Was ist das für eine Logik ? Kein Anfänger wird diesen Code ohne weiteres verstehen.

    Leerzeilen ? Wo zum teufel willst du in dem Code Leerzeichen ?
    Völlig unnötige Konstanten, lateinische Umlaute brauchst du nur jeweils ein mal (!).
    Endl hab ich nicht benutzt.

    Und auf using wären hier mindestens auch die hälfte (inklusive mir) gekommen, aber wenn du einfach zu faul bist meine verdammten Posts zu lesen, wird dir kein Mensch mehr helfen können.



  • Naja,

    std::cout << a << b << c << d << e;
    

    sieht schon besser aus als

    std::cout<<a<<b<<c<<d<<e;
    

    Aber im Endeffekt ziemlich wayne und sieht am Ende iwie doch nur nach ner Rumpickerei auf einem poster auf. Wieso er den gesamten namespace per using-deklaration einbindet wurde nun schon oft genug gesagt.

    Hat denn der Threadersteller noch fragen ?



  • Hacker schrieb:

    Was ist das für eine hirngestörte Logik ? Kaum ein Anfänger wird diesen Code verstehen.

    Natürlich wird er ihn verstehen. Du musst ihm nur erklären, was using tut und was der std-namespace ist.

    Hacker schrieb:

    Leerzeilen ? Wo zum teufel willst du in dem Code Leerzeichen ?

    Verwechsle nicht Leerzeilen mit Leerzeichen. Leerzeichen gehören bei cout << XY hin. Leerzeilen sind ganz okay.

    Hacker schrieb:

    Völlig unnötige Konstanten, lateinische Umlaute brauchst du nur jeweils ein mal (!).

    Und woher soll der Anfänger wissen, was dieses komische \xyz in deinem Code ist? Die Konstanten geben dem Ding einen Namen, da ist völlig egal, wie oft die verwendet werden.

    Hacker schrieb:

    Endl hab ich nicht benutzt.

    Hast du. Bei deiner letzten Ausgabe.

    Hacker schrieb:

    Und auf using wären hier mindestens auch die hälfte (inklusive mir) gekommen

    Und warum hast du es dann nicht gleich richtig gemacht?

    Hacker schrieb:

    aber wenn du einfach zu faul bist meine verdammten Posts zu lesen, wird dir kein Mensch mehr helfen können.

    Ich habe deine Posts gelesen, sonst würde ich nicht auf ihnen herumreiten.



  • 314159265358979 schrieb:

    Hacker schrieb:

    Was ist das für eine hirngestörte Logik ? Kaum ein Anfänger wird diesen Code verstehen.

    Natürlich wird er ihn verstehen. Du musst ihm nur erklären, was using tut und was der std-namespace ist.

    Und warum tust du es dann nicht ?

    314159265358979 schrieb:

    Hacker schrieb:

    Leerzeilen ? Wo zum teufel willst du in dem Code Leerzeichen ?

    Verwechsle nicht Leerzeilen mit Leerzeichen. Leerzeichen gehören bei cout << XY hin. Leerzeilen sind ganz okay.

    Ja, das war ein Schreibfehler. Nein, bei cout hät ich es nicht bemerkt.

    314159265358979 schrieb:

    Hacker schrieb:

    Völlig unnötige Konstanten, lateinische Umlaute brauchst du nur jeweils ein mal (!).

    Und woher soll der Anfänger wissen, was dieses komische \xyz in deinem Code ist? Die Konstanten geben dem Ding einen Namen, da ist völlig egal, wie oft die verwendet werden.

    Ja, aber welche Werte wieso eingesetzt ist trotzem nicht erklärt. (komische Logik)

    314159265358979 schrieb:

    Hacker schrieb:

    Endl hab ich nicht benutzt.

    Hast du. Bei deiner letzten Ausgabe.

    Übersehen.

    314159265358979 schrieb:

    Hacker schrieb:

    Und auf using wären hier mindestens auch die hälfte (inklusive mir) gekommen

    Und warum hast du es dann nicht gleich richtig gemacht?

    Weil floori es verdammt nochmal nicht versteht !? (-> siehe erstes Kommentar)

    314159265358979 schrieb:

    Hacker schrieb:

    aber wenn du einfach zu faul bist meine verdammten Posts zu lesen, wird dir kein Mensch mehr helfen können.

    Ich habe deine Posts gelesen, sonst würde ich nicht auf ihnen herumreiten.

    Wahrscheinlich. Mindestens ein/zweimal hab ich darauf hingewiesen, dass es verständlich und nicht effizient oder gar sauber sein muss, trotzdem ist ersichtlich dass du es ignorierst.



  • Hacker schrieb:

    Und warum tust du es dann nicht ?

    Keine Lust.

    Hacker schrieb:

    Ja, aber welche Werte wieso eingesetzt ist trotzem nicht erklärt.

    Für sowas gibts dann Kommentare. Ich habe mir diese mal erspart, da die Werte sowieso falsch sind. Kannst sie ja mal korrigieren.

    Hacker schrieb:

    Weil floori es verdammt nochmal nicht versteht !?

    Du verwechselst Fahigkeiten mit Wissen mein lieber Padawan. Er versteht es nicht, weil es ihm niemand erklärt hat. Täte das jemand, verstünde er es auch. (Konjunktiv ohne 'würde' ist übrigens viel toller.)

    Hacker schrieb:

    Wahrscheinlich. Mindestens ein/zweimal hab ich darauf hingewiesen, dass es verständlich und nicht effizient oder gar sauber sein muss, trotzdem ist ersichtlich dass du es ignorierst.

    Siehe oben. Wenn er was nicht kennt, erklärs ihm. Deshalb fragt er im Forum, um Hilfe zu bekommen. Dass du dann deinen Code mit Absicht scheiße schreibst, geht gar nicht.



  • Nein, die Werte sind richtig. Du hast höchstwahrscheinlich einfach keine Lust gehabt nachzusehen, ob Sie korrekt waren oder nicht.

    Und wenn du sogar offen zugibst keine Lust zu haben, TEs zu helfen sondern nur rumzumeckern, wieso klinkst du dich dann überhaupt hier ein ?

    Ein paar Links für floori, damit die Codes klarer werden, wenn er dennoch eine Erklärung will soll er die Bekommen.

    Hier ein Link zur doku für Umlaute.
    Hier einer zu Namensräumen und deren Schlüsselwörtern in C++.

    Edit: Ich glaube floori ist inzwischen gar nicht mehr dabei.



  • Kommt jetzt mal runter. Langsam wird die Diskussion persönlich.



  • Hacker schrieb:

    Nein, die Werte sind richtig. Du hast höchstwahrscheinlich einfach keine Lust gehabt nachzusehen, ob Sie korrekt waren oder nicht.

    Ich habe übersehen, dass das Oktalwerte sind, deshalb der Irrtum. Dass du aber dann weiter unten in deinem Post den Link zu den Umlauten postest, wo klar erklärt wird, dass die "inline-Umlaute" nur Nachteile haben, aber sie selbst verwendest, ist einfach nur lächerlich.

    Hacker schrieb:

    Und wenn du sogar offen zugibst keine Lust zu haben, TEs zu helfen sondern nur rumzumeckern, wieso klinkst du dich dann überhaupt hier ein ?

    Weil der TE vermutlich eh nicht mehr mitliest. Und dir werde ich die Welt sicherlich nicht erklären. Kauf dir ein Buch.


Anmelden zum Antworten