C (sorry mir ist kein längerer Titel eingefallen)

  • Hat hier jemand Ahnung von C? Ich hab mal angefangen zu lernen und hab eine Frage:

    Es geht da drum ein Menu auszugeben und die Benutzereingabe einzulesen, irgendwie kein Problem, ist aber doch eins:

    So das Problem ist: Es wird schond der Richtige Befehl ausgeführt, aber manchmal doppelt, manchmal der Falsche - irgendwie total chaotisch.

    Entdeckt ihr nen Fehler?

  • Ich hätts ja so gemacht:

    cout find ich doch irgendwie besser als printf^^.
    Statt "cin.get(var);" ginge auch "cin >> var;" .
    tolower() kenn ich garnicht, bin aber auch nich so der programmier-crack.

    edit:
    öhm, ich vergas, hier gehts ja um c.
    keine Ahnung ob es in C auch geht, ich hab nämlich nur n bissl c++ gelernt und kenn die unterschiede auch nicht.

    Einmal editiert, zuletzt von B-Baller14 (27. Januar 2006 um 19:58)

  • Danke, das ändert aber nichts an meinem Problem :wink:
    Außerdem ist das doch C++

    tolower() macht den character klein (also aus A macht er a)
    Wenn der Benutzer also A eingibt, soll genau das Gleiche wie bei a passieren- deswegen tolower :wink:

    Einmal editiert, zuletzt von xmms (27. Januar 2006 um 19:58)

  • Komisch, bei mir funzt der Code einwandfrei, nur dass ich iostream mit einbinden muss, weil bei mir anscheinend in stdio tolower() nicht deklariert ist. Benutze dev-cpp! :?

  • Funktionieren tut er ja es geht nur um den gesamten Aufbau.
    Also:

    ich habe die Funktion menueausgabe(). Die gibt das Menu aus und wartet auf eine Eingabe, liest sie ein (so wie oben)

    Von da werden dann andere Funktionen aufgerufen (das funktioniert auch meistens). Wenn die andere Funktion dann fertig ist, soll das Menu wieder ausgegeben werden

  • Zitat von xmms

    Funktionieren tut er ja es geht nur um den gesamten Aufbau.
    Also:

    ich habe die Funktion menueausgabe(). Die gibt das Menu aus und wartet auf eine Eingabe, liest sie ein (so wie oben)

    Von da werden dann andere Funktionen aufgerufen (das funktioniert auch meistens). Wenn die andere Funktion dann fertig ist, soll das Menu wieder ausgegeben werden


    versteh ich das richtig, dass du es also ungefähr so hast?


    normal sollte das ja nicht passieren, aber vllt solltest du in jedes if noch ein return (ich ghe mal von einem void aus) schreiben, damit sich die funktion, nachdem sie sich wieder selbst aufgerufen hat, sofort wieder beendet. :?

  • Poste bitte mal den kompletten Code oder lade ihn irgendwo hoch. Ich muß das ganze mal im Zusammenhang sehen, da der Code so eigentlich korrekt aussieht. Höchstwahrscheinlich gibt es Problem auf Klammerungsebene.

    Wobei folgender Abschnitt definitiv Käse ist:

    Code
    else if (menu=='u');
             blablatujenes
    }

    Die Abfrage auf 'u' ist wirkungslos, da sofort ein Semikolon = leere Anweisung folgt und deshalb blablatujenes immer ausgeführt wird ;)

    Aloha, Uli

    Seit 102.0 wieder mit dem jeweils neuesten 64bit-Fx von tete009 unterwegs.

  • Zitat von UliBär

    Die Abfrage auf 'u' ist wirkungslos, da sofort ein Semikolon = leere Anweisung folgt und deshalb blablatujenes immer ausgeführt wird ;)


    Oops, Tippfehler :wink: Da soll gar keins sein

    Es geht da drum, was passiert, wenn sich das Ding selbst aufruft... Kann es da Probleme geben?

    Den gesamten Code hab ich grad nicht auf dem Rechner - ich poste ihn morgen...

  • Zitat von xmms

    Es geht da drum, was passiert, wenn sich das Ding selbst aufruft... Kann es da Probleme geben?

    Aber Hallo! Schon mal Stack Overflow gehört? ;)

    [edit] Bei Rekursion immer an die Abbruchbedingung und return; denken! Wobei... wozu brauchst Du hier Rekursion, da tut's doch wohl 'ne Schleife :-??

    Aloha, Uli

    Seit 102.0 wieder mit dem jeweils neuesten 64bit-Fx von tete009 unterwegs.

  • Wie wäre es denn hiermit:

    Aloha, Uli

    Seit 102.0 wieder mit dem jeweils neuesten 64bit-Fx von tete009 unterwegs.

  • ...und so wäre es sogar elegant:

    :mrgreen:
    [edit] Semikolon nach while(...) vergessen :x
    Aber egal, hätte eh der Compiler gemerkt :P

    Aloha, Uli

    Seit 102.0 wieder mit dem jeweils neuesten 64bit-Fx von tete009 unterwegs.

    Einmal editiert, zuletzt von UliBär (27. Januar 2006 um 21:22)

  • Dankeschön :D

    Ich hatte es vorhin schonmal mit switch probiert, da lieft dann alles noch viel sch....lechter. Nun gut ich werd morgen weiter probieren. Ich hab jetz die Nase voll davon :wink:

    //Edit: Uli: In deinem Code ist ein Fehler :P

  • Schleife *autsch* da hätt ich ja auch drauf kommen können. :roll:
    Rekursion hab ich bisher auch nur ein einziges Mal benutzen müssen, und das war das durchsuchen von Unterordnern mit der WinAPI-Funktion FindNextFile().
    Sonst hat immer die gute alte Schleife geholfen. :lol:

  • Ich muss nochmal nerven :P

    Zu deinem Code, Uli kommt dann das raus, wenn man einen nicht bekannten Buchstaben eingibt, z.B. f. Dann soll default ausgeführt werden.

    Code
    Gib einen Befehl ein: a
    Häääh?Gib einen Befehl ein: Häääh?Gib einen Befehl ein:

    Das ganze passiert aber 2 Mal :roll: , wie an an der Ausgabe oben sieht