scanf Eingabe abschliessen



  • Hallo,

    ich beginne eben erst, mir C beizubringen. Ich mache die ersten Schritte und habe gleich ein eigentlich triviales Problem. Wenn man eine konsolenanwendung unter Windows ablaufen lässt, muss man das Fenster offenhalten mit getchar(), sonst bekommt man ja keine Ausgabe zu Gesicht. Ist das bei anderen Betriebssystem auch so und wenn nicht, warum nicht bzw. warum mus man unter Windows diesen "Umweg" gehen. In idesem Zusammenahng noch ein Problem:

    /* scanf1.c /
    #include <stdio.h>
    int main (void) {
    int i; /
    Ein ganzzahliger Datentyp /
    printf("Bitte geben Sie eine Zahl ein : ");
    scanf("%d",&i); /
    Wartet auf die Eingabe */
    printf("Die Zahl, die Sie eingegeben haben, war %d\n",i);
    return 0;
    }

    leider bekomme ich auch hier das Ergebnis, also die letzte printf Anweisung nicht zu Gesicht, Enter schliesst ja das Fenster. Gibt es keien andere Möglichkeit, als auch hier wieder getchar "dazwischenzuklemmen"? Der autor schreibt, man schliesst die Eingabe von scanf mit der Zeilenvorschubtaste ab, als Symbol (¢). Meint er schon die Eingabetaste, oder? die schliesst aber das Fenster. Irgendwie steh ich aufm Schlauch.

    Wäre für einen Tipp dankbar.

    Grüße

    palo



  • Möglichkeiten es ganz einfach stehen zu lassen fallen mir net ein bin auch kein Profi. aber mit
    system("Pause"); bekommst du "Taste drücken zum Fortfahren" auf dem Bildschirm was stoppt bis zum drücken.

    sleep(sekunden); Bekommst du hin das dein Prog die Zahl in sekunden wartet.
    EDIT: Ach ja aber sleep() gehört meines wissens nicht zu ANSI C, funktioniert aber trotzdem

    Warscheinlich nicht optimal aber immerhin etwas 😃



  • Deine Frage wurde schon zimlich oft gestellt.

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html

    sleep(sekunden); Bekommst du hin das dein Prog die Zahl in sekunden wartet.
    EDIT: Ach ja aber sleep() gehört meines wissens nicht zu ANSI C, funktioniert aber trotzdem

    Dies ist die Linux-Variante. Für Windows existiert eine mit Millisekunden (1s = 1000ms) die lautet allerdings Sleep() (1. Buchstabe groß). Dazu brauchst du allerdings eine Headerdatei, die du mit

    #include <windows.h>
    

    einbinden kannst.



  • Hallo,

    danke für die Antworten. Ich habe den bestehenden Artikel im Archiv nicht endeckt vorher, sorry!.
    In diesem Zusammenhang eine Frage: Was genau ist ein Puffer? Zum Beispiel scanf, wenn ich eine Zahl abfrage, sagen wir einen Integer, also :

    int i;
    printf("Bitte geben Sie eine Zahl ein : ");
    scanf("%d",&i);
    printf("Die Zahl, die Sie eingegeben haben, war %d\n",i);

    dann wird doch Speicher reserviert für einen int, also auf 32 Bit Systemen -2.147.483.648 bzw + 2.147.483.647, ist dieser reservierte Speicherbereich mit "Puffer" gemeint? Oder ist der Puffer ein gesonderter Bereich im RAM? Der Puffer müßte doch dem Datentyp entsprechen, oder? Sogesehen ist jeder reservierte Berich im Speicher für eine Variable ein Puffer, aber im Zusammenhang mit Variablen wird dieser Begriff nie erwähnt.Klingt vielleicht ein wenig blöd, die Frage, aber ich kann nirgends eine genaue Definition finden zu "Puffer", außer eben im Zusammenhang mit Tastatureingaben oder Ausgaben. Ich will nur sicherstellen, dass ich alles richtig verstehe.
    Ich habe noch eine Frage zum Datentyp long, ich schau aber erstmal ins Archiv, ggf. poste ich nochmal explizit.
    Vielleicht kann ja jemand mein Puffer Problem auflösen?

    Danke und Grüße

    palo



  • probier das nach dem scanf:

    int c; while ((c = getchar()) != EOF && c != '\n');
    

    es loescht den rest der im tastaturpuffer befindlichen zeile.


Anmelden zum Antworten