Probleme mit if/else



  • DarthZiu schrieb:

    Hi,

    Klingt jetzt vielleicht unpassend und Kleinlich, aber

    1. if-Abfrage, nicht if-Funktion
    2. Wenn du Anfänger bist, rate ich dir, if/else Geschichten immer ordentlich zu klammern:
    if(...)
    {
        // tu was
    } else
    {
        // tu was anderes
    }
    

    Wenn du nämlich bei deinem Code jetzt noch eine Anweisung im else-Zweig ausführen willst, macht man gerade als Anfänger schnell mal folgenden Fehler:

    if (eingabe == "XXX") printf ("Das ist Richtig.\n");
        else
        printf ("Das ist Falsch.\n");
        printf ("Das soll auch in den else-Zweig.\n"); // Die Zeile wird immer ausgeführt
    

    Ahh, OK das mit den Klammern hatte ich schon heut vormittag probiert aber net so ganz hin bekommen...werde mich da gleich mal ran machen und schauen ob ich es hin bekomme irgendwie oder ob ich das so machen muss wie "derWissende" es sagte...und was deinen Punkt 1 angeht muss ich sagen, das ich auch wenn ich das falsche sagen sollte, das richtige meine 😃 meistens zumindest....kenne nur aus Excel die unter anderem verschachtelten Wenn-FUNKTIONEN die bei C wohl nun Abfragen heißen...ich bitte dies zu entschuldigen, falls das bei manchen hier auf Unmut stößt.



  • Das Problem ist für dich auf deinem Niveau vielleicht nicht verständlich, aber ich versuche mal, es an einem Beispiel zu erklären: Du vergleichst hier zwei Wegzeiger, die nie die gleichen sind, obwohl sie vielleicht auf die gleiche Stadt zeigen. Um das Problem zu lösen, müsstest du die Städte vergleichen, und das macht strcmp():

    if(strcmp(eingabe, "ABC") == 0) tuwas();
    

    strcmp() gibt 0 zurück, wenn die Strings gleich sind, eine Zahl kleiner 0, wenn der erste im Alphabet vor dem anderen kommt und eine Zahl größer als 0, wenn der erste String im Alphabet nach dem zweiten kommt. Daher der Vergleich mit 0.



  • wxSkip schrieb:

    Das Problem ist für dich auf deinem Niveau vielleicht nicht verständlich, aber ich versuche mal, es an einem Beispiel zu erklären: Du vergleichst hier zwei Wegzeiger, die nie die gleichen sind, obwohl sie vielleicht auf die gleiche Stadt zeigen. Um das Problem zu lösen, müsstest du die Städte vergleichen, und das macht strcmp():

    if(strcmp(eingabe, "ABC") == 0) tuwas();
    

    strcmp() gibt 0 zurück, wenn die Strings gleich sind, eine Zahl kleiner 0, wenn der erste im Alphabet vor dem anderen kommt und eine Zahl größer als 0, wenn der erste String im Alphabet nach dem zweiten kommt. Daher der Vergleich mit 0.

    Ich danke dir vielmals...werde das im laufe des Abends mal testen in wieweit ich damit vorran komme.

    und Sorry für meine (noch) Unwissenheit...fange nächsten Monat mit der Ausbildung zum FIAE an und wollte einfach nur mal Vorkenntnisse sammeln, dementsprechend dürften auch im laufe der Zeit weniger Fragen meinerseits hier auftauchen und hoffentlich ersetzt mit hilfreichen Antworten für andere in diesem Bereich



  • Du fängst eine Fachinformatiker Ausbildung (Anwendungsentwicklung) an?

    Offensichtlich kannst Du kein C, ich hoffe Du kannst sonst schon eine Programmiersprache...

    Sorry, aber mich wundert es, dass man mit so wenig Vorkenntnissen eine Ausbildungsplatz bekommt. Ich hoffe, dass die Leute dort genug Zeit haben, Dir was beizubringen.

    Ich würde für C immer noch das Buch von Kernighan & Ritchie "The C Programming Language" empfehlen. Ohne modernen Schnickschnack - einfach alle C Grundlagen.

    Ist sicher effektiver so ein Buch zu lesen, als wegen jeder Kleinigkeit in einem Forum zu posten.



  • Paulomat schrieb:

    Du fängst eine Fachinformatiker Ausbildung (Anwendungsentwicklung) an?

    Offensichtlich kannst Du kein C, ich hoffe Du kannst sonst schon eine Programmiersprache...

    Sorry, aber mich wundert es, dass man mit so wenig Vorkenntnissen eine Ausbildungsplatz bekommt

    Ist es nicht Sinn einer Ausbildung, es zu lernen? :p
    Ich würde als Kriterium eher eine gute Note in Mathe und Info voraussetzen und ein gewisses logisches Verständnis. Aber eine Programmiersprache schon zu können, finde ich etwas übertrieben. Dann würde es nämlich sehr wenige Azubis geben 😃



  • danke für deinen Post vorab...mir ist klar das es ohne großartige Vorkenntnissse recht schwer ist, sich mit der Thematik zu beschäftigen, allerdings muss ich dazu sagen das dies meine 2. Ausbildung sein wird; ergo ich bin auch keine 16 mehr ;-)...soviel mal dazu..ich bin gewillt den Beruf des FIAE zu erlernen und denke auch das das jeder schaffen kann der nur genug Ehrgeiz dafür entwickelt bzw diesen zeigt....inhaltlich hast du mir nicht helfen können also frage ich mich wieso du diesen Kommentar überhaupt loswerden wolltest....vllt nimmst du ja mal Stellung dazu.

    Nebenbei noch erwähnt, hättest du diesen Thread oder zumindest meine Posts besser gelesen, hättest du gewusst das ich dabei bin ein C Tutorial abzuarbeiten...nur das mein Einfallsreichtum weiter gereicht hat, als das aktuelle Kapitel womit ich mich an diesem Tag beschäftigt habe, sofern bitte ich dich solche Äußerungen bezüglich "Du kannst kein C, also wie kannst du nur nen Ausbildungsplatz bekommen" zu unterlassen 😉

    Ich kann auch HTML und kenne mich mit CSS aus und nun ??

    Das ist wieder was ganz anderes als C oder C++....nebenbei beschäftige ich mich auch kontinuierlich mit php also was willst du mir sagen ??

    Ich sage dir nur soviel das ich an mehreren Baustellen gleichzeitig arbeite ohne darin ein Problem zu sehen 😉

    Übrigens frag ich nicht wegen jeder Kleinigkeit hier im Forum da dieser Thread meinen 1. Post auch beinhaltet...falls dir sowas auf den Magen stoßen sollte, finde ich das du dieses Forum meiden solltest.

    PS: Als Buch finde ich das vom Prof. Wirth Algorythmen und Datenstrukturen - Modular 2 interessanter, zumal mir dies auch von meinem zukünftigen Arbeitgeber bzw. meiner zukünftigen Ausbildungsstelle empfohlen wurde...weiterhin muss ich anmerken das ich mich aktuell nur mit C beschäftige um grad mal die Grundlagen zu erlernen, da ich im Ausbildungsbetrieb VORRANGIG C++ brauche und das nun auch verstärkt mir anschauen bzw lernen werde.



  • mein Post hat sich auf den Post von Paulomat bezogen und nicht auf BasicMan01 😉

    @BasicMan01 warst leider etwas schneller mit dem posten...danke aber dennoch für deinen Post und ich teile deine Ansicht 🙂



  • Aber das Grundproblem ist Dir jetzt klar, oder?
    Du versuchst, mit %s einen String auf den Platz eines Int eingabe einzulesen, das geht nicht gut. 👎
    Was das anbelangt, ist C tatsächlich nicht toll bestückt, ist aber nun mal so 🙄



  • pointercrash() schrieb:

    Aber das Grundproblem ist Dir jetzt klar, oder?
    Du versuchst, mit %s einen String auf den Platz eines Int eingabe einzulesen, das geht nicht gut. 👎
    Was das anbelangt, ist C tatsächlich nicht toll bestückt, ist aber nun mal so 🙄



  • derUnwissende/ohneLogin schrieb:

    ich bin gewillt den Beruf des FIAE zu erlernen und denke auch das das jeder schaffen kann der nur genug Ehrgeiz dafür entwickelt bzw diesen zeigt....

    Ich wollte Dich nicht entmutigen, sondern war schlicht verwundert. Man hört immer wieder Beschwerden, die Industrie würde so hohe Anforderungen an die Azubi-Bewerber stellen und würde selbst nicht viel in die Ausbildung investieren. Sprich: es werden Leute gesucht, die man schon gleich einsetzen kann, ohne dass man ihnen erstmal einige Monate eine Programmiersprache beibringt.

    derUnwissende/ohneLogin schrieb:

    inhaltlich hast du mir nicht helfen können

    Auf das sachliche Problem wurde schon von Anderen kompetent hingewiesen. Deshalb von mir eher der Meta-Ratschlag: gutes Fachbuch lesen, ist schneller und effektiver, als wegen relativ einfachen Grundlagenfragen in einem Forum zu posten.

    Wie willst Du das denn auf der Arbeit machen, wenn Du eine Aufgabe gestellt bekommst? "Momentmal Chef, die Compiler-Doku ist mir zu viel zu lesen, ich frag jetzt erstmal in ein paar Internet-Foren, bevor ich losleg...."

    derUnwissende/ohneLogin schrieb:

    Nebenbei noch erwähnt, hättest du diesen Thread oder zumindest meine Posts besser gelesen, hättest du gewusst das ich dabei bin ein C Tutorial abzuarbeiten...

    Das ist mir keinesfalls entgangen. Bloß warum liesst Du dann nicht einfach mal im Tutorial weiter? Grundlagen wie String-Vergleiche werden da sicher noch erklärt.

    derUnwissende/ohneLogin schrieb:

    Ich kann auch HTML und kenne mich mit CSS aus und nun ??

    Das sind aber keine Programmiersprachen.

    derUnwissende/ohneLogin schrieb:

    Das ist wieder was ganz anderes als C oder C++....nebenbei beschäftige ich mich auch kontinuierlich mit php also was willst du mir sagen ??

    PHP ist natürlich eine Programmiersprache. Aber es ist eine dynamische, untypisierte Skriptsprache. Sie kennt Strings als eingebaute Datentypen und hat entsprechende Operatoren - C/C++ nicht.

    derUnwissende/ohneLogin schrieb:

    PS: Als Buch finde ich das vom Prof. Wirth Algorythmen und Datenstrukturen - Modular 2 interessanter,

    1. Algorithmen
    2. Modula-2

    Als Buch findest Du das interessanter.... als was? Als Dein C-Tutorial? Hast Du das K&R-C Buch mal angeschaut? Es ist _das Buch_ um C zu lernen. Von den Leuten, die diese Sprache vor >30 Jahren entwickelt haben. Es erklärt Dir die Low-level Details, die Dir bei C evtl. das Leben schwermachen können (gerade wenn Du von high-level PHP kommst).

    Wirths Bücher sind natürlich auf ihrem Gebiet auch Klassiker. Aber Datenstrukturen und Algorithmen in seiner Sprache Modula-2 (war mal Ende 70er bis Ende 80er in der dt. akademischen Informatik populär) werden Dir nicht unbedingt bei low-level C Problemen weiterhelfen.

    BTW: einige seiner Bücher hat Wirth übrigends auch als kostenlose E-Books auf seiner Homepage: http://www.cs.inf.ethz.ch/~wirth/; auch das "Datenstrukturen und Algorithmen", allerdings in der moderneren Oberon-2 Fassung (ja, nach Algol-W, Pascal und Modula hat Wirth noch eine vierte Sprache entworfen - Spötter würden sie eher so benennen: Pascal V1, Pascal V2 - mit Modulen, Pascal V3 - mit Objekten).

    derUnwissende/ohneLogin schrieb:

    weiterhin muss ich anmerken das ich mich aktuell nur mit C beschäftige um grad mal die Grundlagen zu erlernen, da ich im Ausbildungsbetrieb VORRANGIG C++ brauche und das nun auch verstärkt mir anschauen bzw lernen werde.

    ANSI-C ist fast eine komplette Untermenge von C++. Du solltest es also komplett können, um auch in C++ evtl. low-level C Code zu verstehen. Aber wenn Du in dem Monat noch einiges von C++ lernen willst, solltest Du nicht bei C Kleinigkeiten lange verweilen, denn C++ ist gefühlte 4-8 mal komplexer als C.

    Schau nur mal, was für ein Büchelchen das K&R-Buch ist, und was für ein Wälzer der Stroustrup!

    So und damit Du nicht wieder sagst, ich würde nicht auf das eigentliche Problem eingehen:

    - C kennt keine Strings, es benutzt char-Arrays als String Ersatz.
    - für C ist ein char Array auch nur ein Array von Zeichen, sonst nix
    - für String-Operationen braucht man Bibliotheksfunktionen

    Also:

    char w; // w ist Variable mit einem Zeichen (oder 1 Byte Zahl).
    char s[100]; // s ist Pointer auf Char-Array (bzw. ist ein Char-Array)
    char *t=NULL; // t ist Char-Pointer, zeigt erstmal auf Nix.
    
    char x='a', y='b';
    if (x==y) // das ist ok, char ist einfacher Typ, kann verglichen werden
       puts("Zeichen in Variable x ist gleich Zeichen in Variable y");
    else  
       printf("Die Zeichen in Variable x und y sind unterschiedlich.\n"
              "x ist %c und y ist %c\n", x,y); 
    
    // Bibliotheks-Funktionen aus string.h: strcpy, strcmp
    
    strcpy(s,"huhu"); //kopiere String-Literal in char-Array
    char u[]="huhu"; // noch ein char-Array mit Literal initialisiert
    if (strcmp(s,u)==0) 
       printf("s und u sind Inhaltlich gleich\n");
    
    t=s; // kopiert Pointer, nicht die Arrays
    if (s==t) // vergleicht die Pointer
       puts("Char-Pointer s und t zeigen auf gleiche Speicherstelle.\n");
    

    C-Strings sind in C++ aber zum Glück nicht mehr notwendig, da es die std::strings von C++ gibt, die sich fast wie eingebaute Typen verhalten. Das ist mit der Witz an OOP und überladbaren Operatoren: man kann eigene Typen bauen, die fast so komfortabel sind, wie fest eingebaute.


Anmelden zum Antworten