2016-04-25 14 views
-2

Für den Vergleich von zwei Strings durch eine strcmp() Funktion nahm ich eine Eingabezeichenfolge von fgets() und cin und eine andere ist in der Funktion als Standardargument gegeben. Aber wenn ich sie durch strcmp() function Ausgänge vergleiche nicht übereinstimmt.Ausgabe entspricht nicht strcmp() -Funktion in c

char a[20]; 
    int b; 
    cin>>a; 
    b=strcmp(a,"ab"); 
    cout<<b; 

wo i Eingang nehme a als ab und b ‚s Wert ist 0, was vollständig fine.But ist, wenn für den gleichen Eingang von fgets() genommen wird dann strcmp() Ausgang ist wie bisher nicht gleich.

char a[20]; 
    int b; 
    fgets(a,sizeof(a),stdin); 
    b=strcmp(a,"ab"); 
    cout<<b; 

wo a s-Wert 's Wert ab und b ist' ist 1. Warum? ist das ein Compiler-Problem oder etwas anderes?

+1

Es ist kein Compiler-Problem. Das Problem ist, dass Sie die Dokumente nicht näher gelesen haben. [Die fgets-Funktionsdokumentation] (http://en.cppreference.com/w/c/io/fgets). Was denkst du, was der zweite Parameter tut? – PaulMcKenzie

+0

'fgets' und' cin >> a' führen nicht zur selben Zeichenfolge. Bitte lesen Sie die Dokumentation für _both_, um ein besseres Verständnis dessen zu bekommen, was sie tun. –

+0

@PaulMcKenzie as str enthält das Newline-Zeichen, so dass es Wert 1 gibt. Ist es richtig? –

Antwort

1

fgets() keine Neue-Zeile nicht abzustreifen, pro Abschnitt 7.21.7.2 Die fgets Funktion von the C standard:

fgets Die Funktion liest höchstens eine weniger als die Zahl der durch n spezifizierten Zeichen aus Der Strom, auf den stream zeigt, in das Array, auf das s zeigt. Nach einem Zeichen für eine neue Zeile (das beibehalten wird) oder nach dem Ende der Datei werden keine zusätzlichen Zeichen gelesen . Ein Nullzeichen wird unmittelbar nach dem letzten gelesenen Zeichen in das Array geschrieben.