"getchar();" Geht nicht!

Tutorials.at
Verfügbare Informationen zu ""getchar();" Geht nicht!"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: vpascal - Kimi - detewe89
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 6
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: "getchar();" Geht nicht!
  • Letzte Antwort: vor 16 Jahren, 5 Monaten, 18 Tagen, 5 Stunden, 46 Minuten
  • Alle Beiträge und Antworten zu ""getchar();" Geht nicht!"

    Re: "getchar();" Geht nicht!

    vpascal - 06.11.2007, 17:05

    "getchar();" Geht nicht!
    Hi zusammen, ich habe grade mal mit dem C programmieren begonnen, und nun habe ich schon ein erstes Problem! Und zwar sieht mein Code so aus:

    Code: #include <stdio.h>

    int main()
    {
    int summand1, summand2;
    printf ("Summanden eingeben: ");
    scanf ("%d %d", &summand1, &summand2);
    printf ("%d + %d = %d\n", summand1,summand2, summand1+summand2);
    getchar();
    return 0;
    }

    (Ist eine abgespeckte Version von demRechner hier aus dem Tutorial)

    Soo, nun funktioniert das "getchar()" nicht. Das Programm schließt sich einfach so. Mit "getch()" geht es! Ist es bloß ein doofer Anfängerfehler, oder was ist es?

    Achso: Ich benutze den Bloodshed DevC++ Compiler.



    Re: "getchar();" Geht nicht!

    Kimi - 06.11.2007, 20:46


    Also soweit wie mir das an der uni gezeigt wurde kommt da statt getchar getch() hin.

    Denn getchar definiert man ja mit einem zeichen bzw. in dem programm.

    Bitte korregiert mich, ich will kein schwachsinn in die umwelt setzen.

    Danke!



    Re: "getchar();" Geht nicht!

    vpascal - 06.11.2007, 22:23


    Generell ist getch() richtig, aber nur wenn das Programm bloß auf Windoof laufen soll. Das Hello world programm hat mit getchar() ja geklappt.



    Re: "getchar();" Geht nicht!

    detewe89 - 06.11.2007, 22:33


    @vpascal:
    Problem ist, dass in Deinem Puffer genau ein Zeichen steht (das Enter aus Deinem scanf-Befehl), und genau dieses Enter "holt" sich getchar() jetzt. Das Programm wartet nicht mehr auf ein erneutes Enter vom Benutzer, da es ja schon eines im Puffer vorfindet. Der Puffer ist danach geleert und das Programm schließt.

    Jenachdem wieviele Zeichen im Puffer noch stehen, braucht man manchmal Gebastel wie

    Code: getchar();
    getchar();
    getchar();
    getchar();

    um erst einen Programmschluss zu erzwingen. Wie Du siehst, hängt dies immer davon ab, was im Laufe des Programms eingegeben wird und was im Puffer steht. Wie Kimi sagt: Das ist eher eine Funktion zum Zeichen Einlasen innerhalb des Programmes.
    Weit einfacher uns sicherer geht aber die Variante von exbs:

    Code: setvbuf(stdin,NULL,_IONBF,0);
    setvbuf(stdin,NULL,_IOFBF,BUFSIZ);

    Und dann noch ein getchar(); darunter setzen. Dann ist der Puffer (engl. buffer) nämlich leer und Dein Prog wartet tatsächlich auf eine Eingabe, um zu schließen.

    Diese Variante funktioniert auch einwandfrei unter Linux, ist also gut und portabel.

    Nicht so gut (da nicht portabel), ist:

    Code: #include <conio.h>
    (...blablabla...)

    getch();

    Davon ist jedoch abzuraten.

    Hoffentlich ist das nicht allzu fachchinesisch :-)

    Gruß
    Daniel



    Re: "getchar();" Geht nicht!

    vpascal - 07.11.2007, 15:10


    Ist doch fein, Danke! Hatte ja schon erwähnt das getch() nicht das optimalste ist. Danke für den Tipp! Jetzt wo du's sagst macht es klick! Das ist eine logische Erklärung, aber bei PASCAL ist es nicht so, da ist es egal ob vorher was eingelesen wurde oder nicht. Aber wenn man's weiß dann achtet man ja auch drauf^^

    THX



    Re: "getchar();" Geht nicht!

    detewe89 - 07.11.2007, 17:36


    Freut mich dass es hinhaut, schade dass Du so einen "schlechten" Einstieg in C hattest, dabei ist das ne tolle, halbwegs moderne Sprache, Du wirst auch sehen, was man damit alles machen kann. Und echt spitze, dass Du in dem Alter schon anfängst. :-) !

    Immer zu Hilfe bereit :D
    Daniel



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    Lieblings Tools ? - gepostet von exbs am Dienstag 27.02.2007
    Hey - gepostet von silver am Sonntag 31.12.2006
    registry - gepostet von Moritz am Sonntag 18.11.2007
    FAQ - gepostet von Dirty Oerty am Donnerstag 29.03.2007
    C oder Basic - gepostet von absoluter noob tith am Sonntag 09.07.2006
    Textdatei bearbeiten - gepostet von tarzipan7 am Dienstag 20.11.2007
    Turbo C - gepostet von Mei$ter A^ am Montag 24.04.2006
    Ping programm - gepostet von Elch am Donnerstag 26.07.2007
    Error - gepostet von xxx am Freitag 01.12.2006



    Ähnliche Beiträge wie ""getchar();" Geht nicht!"

    bin dabei wenns kla geht ! - Dj One Shotz (Sonntag 18.03.2007)
    so geht es nicht weiter - my-key (Mittwoch 19.09.2007)
    SUCHE JEMAND FÜR DONNERSTAG ZUR GANG BANG PARTY - nike88 (Montag 06.12.2010)
    Wie geht`s euch heute? - Jen (Freitag 22.09.2006)
    was geht in de ferien? - Drummergod mio (Freitag 04.08.2006)
    forum geht wieder - SvanSick (Sonntag 24.12.2006)
    Los geht's.... - ChRiStIaN (Dienstag 10.04.2007)
    Sehr geehrte Damen und Herren, - Alf (Mittwoch 30.04.2008)
    jetzt geht es los - martina (Sonntag 22.01.2006)
    Stop loss, warum geht der nicht näher? - moneymagnet (Mittwoch 25.05.2005)