2017-01-16 3 views
0
#include <stdio.h> 

int main() { 

    char str[50]; 
    printf("Enter a string : "); 
    gets(str); 
    printf("You entered: %s", str); 
    return(0); 
} 

ich den Code auf Eclipse läuft, erwartete ich das folgende Ergebnis zu erhalten:Mit gets() und printf() zusammen in C liefert unerwartete Ergebnisse

Enter a string : abcde 
You entered: abcde 

aber wenn ich das Programm ausführen, Die erste print-Anweisung wird nicht in der Konsole angezeigt, und nachdem ich eine beliebige Zeichenfolge eingegeben habe, schlägt das Programm fehl. Kann mir jemand sagen, warum das passiert ist? Kannst du mir auch sagen, wie ich meinen Code reparieren kann, um das erwartete Ergebnis zu erhalten?

+6

[Verwenden Sie nicht 'gets()', es ist gefährlich] (http://stackoverflow.com/q/1694036/2173917). Verwenden Sie stattdessen ['fgets()'] (https://linux.die.net/man/3/fgets). –

+6

Was meinst du damit, dass es "versagt"? * Wie * scheitert es? Stürzt es ab? Sie erhalten unerwartete Ergebnisse? Bitte erläutern. –

+4

* "Die erste Druckanweisung wird nicht in der Konsole angezeigt" * Versuchen Sie 'fflush (stdout);' nach dem 'printf'. –

Antwort

-3

Verwenden Sie fgets(char *str, int n, FILE *stream); anstelle von gets.

+4

Während es eine gute Idee ist, 'fgets' anstelle von' gets' zu verwenden, ist das nicht das Problem, das das OP hat - das Problem ist, dass die 'printf' Ausgabe nicht einmal angezeigt wird (was vor dem Aufruf von ist 'bekommt'). –

+2

Das behebt das fehlende Ausgabeproblem nicht. – Jens

4

Die Ausgabe ist wahrscheinlich liniengepuffert, und Ihre printf-Zeichenkette endet nicht mit einem Zeilenumbruch. Forciert die Ausgabe mit fflush(NULL); nach einer beliebigen printf(), die nicht in \n endet.

+0

Sie können [Regeln der automatischen Spülung stdout] (http://stackoverflow.com/q/39536212/2410359) informativ finden. '\ n'' ist im Allgemeinen ausreichend, obwohl nicht angegeben, um zu spülen. 'fflush (NULL)' wirkt sich auf alle Ausgabeströme aus. Schlagen Sie 'fflush (stdout);'. – chux

Verwandte Themen