Brauche Hilfe, bin C-Neuling!!!



  • Also, Arrays sind bestandteile der nächsten Aufgabe, bin ich zumindest der Meinung, noch hab ich sie nicht, die Ausgabe soll wirklich nur über printf mit Zeilenumbrüchen gemacht werden. Das hab ich soweit noch verstnden gehabt, wie das funzt, ich hatte nur Probleme mit diesen Vorgaben von dem Übungsleiter...Aber ich glaub ich versteh das jetzt. Sonst schreib ich noch mal und heul euch vor, das es nicht funzt 😃 !
    Noch mal vielen Dank, cu emi!



  • @ska_emily: Schau mal, elise hat einen Post nochmal editiert... Und ich bin auch der Meinung! 😉

    @C.Stoll:

    C.Stoll schrieb:

    Die Lösung steht doch schon oben in mcr's Beitrag (eine Schleife ist nicht wirklich notwendig, um einen einzelnen Wert von der Kommandozeile zu holen ...

    Ich weiß nicht, wie ich es noch ausdrücken soll: Wenn meine Freundin eine Sitzheizung in Ihr Auto haben will und ich baue eine regelbare Sitzheizung ein - dann ist das zwar mehr als gewollt, aber nicht verkehrt. Nun hab Dich nicht so und vergiß die Schleife, wenn Sie DIR zuviel ist. Ich fände es nervig ein Programm zu testen, welches ich immer wieder neu starten müsste - auch ein Grund für ne Schleife! 😉

    C.Stoll schrieb:

    ...zumal du in jedem Durchlauf mit den selben Werten arbeiten würdest und demzufolge auch die selben Ergebnisse bekommst (Endlosschleife).

    Endlosschleife mit Abbruch durch Taste "q"... So war das gedacht - nur das die Zeichenabfrage (wie andere Kleinigkeiten) nicht so glücklich war. Ich habe jedoch inzwischen schon 2x darauf hingewiesen, dass mein Beispiel zur ANREGUNG ist, KEINEN Anspruch auf Richtigkeit erhebt und Verbesserungen nötig sein könnten. Was willst Du erreichen mit Deiner Stocherei in diesen Kleinigkeiten?

    Wenn es beruhigt:
    @ alle Leser: die Prüfung

    if(TempInput != c)
    

    muss die switch-Anweisung einschliessen! ⚠



  • Kolumbus schrieb:

    @ska_emily: Schau mal, elise hat einen Post nochmal editiert... Und ich bin auch der Meinung! 😉

    @C.Stoll:

    C.Stoll schrieb:

    Die Lösung steht doch schon oben in mcr's Beitrag (eine Schleife ist nicht wirklich notwendig, um einen einzelnen Wert von der Kommandozeile zu holen ...

    Ich weiß nicht, wie ich es noch ausdrücken soll: Wenn meine Freundin eine Sitzheizung in Ihr Auto haben will und ich baue eine regelbare Sitzheizung ein - dann ist das zwar mehr als gewollt, aber nicht verkehrt. Nun hab Dich nicht so und vergiß die Schleife, wenn Sie DIR zuviel ist. Ich fände es nervig ein Programm zu testen, welches ich immer wieder neu starten müsste - auch ein Grund für ne Schleife! 😉

    Ja, ich hab' nichts dagegen, in einem Programm mehrere Eingaben nacheinander bearbeiten zu können. Aber hier ging (auch) es um die Verarbeitung der Kommandozeilen-Argumente - und da ist es etwas ungeschickt, immer den selben abzufragen 😉



  • Hallöle!
    Ich hab da jetzt nochein Problem, durch das ich nicht durchsteige: es funzt soweit, wenn man allerdings 1.2 oder sowas eingibt sieht er das als 1 und zeigt mir das passende Bild!
    Weiß jemand, wie man sowas abfagen kann?
    gruß emi



  • Würd es nicht reichen das du abfragst ob die (Eingabe ==0,1,2,3,4)
    --> dann tue das
    --> andernfalls Fehlermeldung!!



  • Irgendwie hatte ich n Brett vorm Kopf... Kommandozeile-Argumente war das Stichwort 🙄 Also ich seh's dann doch ein @C.Stoll.
    Ich war die ganze Zeit drauf aus, dass es um Tastatureingaben geht wenn das Programm schon läuft. Peinlich! 🕶

    Edit: PS @ska_emily: Geht doch mit der Berufsbezeichnung 😉



  • ska_emily schrieb:

    Hallöle!
    Ich hab da jetzt nochein Problem, durch das ich nicht durchsteige: es funzt soweit, wenn man allerdings 1.2 oder sowas eingibt sieht er das als 1 und zeigt mir das passende Bild!

    Der Code mit dem sscanf() liest ja auch nur das erste Zeichen des Eingabeparameters (wobei ich immer noch der Meinung bin, daß ein c=argv[1][0]; da völlig ausreichen würde). Wenn du überprüfen willst, ob das alleine steht, mußt du die Stringlänge überprüfen oder das zweite Zeichen mit '\0' vergleichen.



  • Guten Morgen,

    was mir gerade noch einfiel: Für viele Programme die man in grauer Vorzeit ja fast immer über die "Kommandozeile" gestartet hat, gab es Regeln für die Kommandozeilenparameter eines Programms. Diese waren dann irgendwo nachzulesen (helpfile etc).
    @ska_emily: es wäre gut, wenn Du mal VollständiG postest welche Kommandozeilenparameter für Dein Program erlaubt sein sollen und welche "abartig eingegebenen" zusätzlich erkannt werden sollen.
    Sowas wie zB: "-1" "-2" "-3" "-4" ist erlaubt, "1.2.3.4.5" soll auch erkannt werden und Bild 1 - 4 nacheinander ausgeben, sowie für die 5 eine Fehlermeldung ausgeben...



  • ska_emily schrieb:

    Weiß jemand, wie man sowas abfagen kann?

    wie CStoll schon gesagt hat: das zweite Zeichen von argv[1] mit '\0' vergleichen, dass das stringende markiert. is zwar für den zweck etwas übertrieben aber man könnte aus auch so machen:

    ...
    if (argc!=2 || strlen(argv[1])!=1 ) // prüft ob in argv[1] mehr als ein zeichen steht
    {
       fprintf(stderr, "(E) Falscher Aufruf\n");
       fprintf(stderr, "Use: %s [0..3]\n", argv[0]);        
       return 1;
    }
    

    wobei ich grad überlegen muss: wenn argc!=2 dann wird strlen(...) trotzdem abgefragt... gibt das irgend ne speicherverletzung, ich meine man liest ja in "fremdem" speicher.



  • santa klaus schrieb:

    wobei ich grad überlegen muss: wenn argc!=2 dann wird strlen(...) trotzdem abgefragt... gibt das irgend ne speicherverletzung, ich meine man liest ja in "fremdem" speicher.

    Du hast Glück - die C Logikoperatoren haben eine eingebaute "Kurzschluss-Automatik", d.h. wenn der erste Operand von || schon wahr (bzw. der erste Operand von && falsch) ist, wird der zweite gar nicht mehr ausgewertet, weil das Ergebnis ja schon feststeht. Darum sind in C auch Abfragen ala if(str!=NULL && irgendeine Bedingung zu str)... üblich.


Anmelden zum Antworten