Gibt es eine Möglichkeit, einen Blick auf die stdin-Puffer?

Wissen wir, dass stdin ist standardmäßig eine gepufferte Eingabe; der Beweis dafür ist in der Verwendung der Mechanismen, die "überlassen von Daten" auf stdin wie scanf():

int main()
{
    char c[10] = {'\0'};
    scanf("%9s", c);
    printf("%s, and left is: %d\n", c, getchar());
    return 0;
}

./ein.aus

Hallo

Hallo, und Links ist 10

10 als newline natürlich...

Ich war schon immer neugierig, gibt es eine Möglichkeit, Sie zu "peek" an der stdin Puffer ohne entfernen von was auch immer kann, dort zu wohnen?

BEARBEITEN

Ein besseres Beispiel wäre:

scanf("%9[^.]", c);

Mit einer Eingabe "an.ct", jetzt habe ich "Daten" (ct\n) Links auf stdin, nicht nur ein Zeilenumbruch.

  • Sie können ungetc() nach gucken. Gut genug?
  • Ich denke, es ist nicht schlecht... Was ist, wenn gab es eine ganze Reihe von Zeichen Links? Kann ich wissen, die Länge der Daten, Links auf stdin? oder könnte ich ungetc() mehr als einen Charakter?
  • "Ein Zeichen der pushback ist garantiert. Wenn die ungetc Funktion wird aufgerufen, zu viele Male auf dem gleichen stream ohne zwischengeschalteten Lesen oder Datei-Positionierung Betrieb auf dem stream, kann der Vorgang fehlschlagen." In der Regel können Sie ungetc mehr als eine, aber nur eine ist garantiert.
  • Nach denken für eine Weile, ich Stimme mit Ihrer Antwort (hier in den Kommentaren) als die beste Lösung, um zu wissen, was auf stdin. Kannst du es als Antwort, so kann ich das annehmen?
InformationsquelleAutor Mike | 2012-12-21
Schreibe einen Kommentar