2016-12-20 3 views
2

Ich versuche, aus dem Terminal ein paar Zeilen Text mit fgets zu lesen. Das Problem ist nur eine Zeile lesen und stoppt. Ich habe versucht, Puffer zu spülen und getchar zu verwenden, um die Zeilenschaltung zu absorbieren, aber es hat immer noch nicht funktioniert.Mit fgets in einer Schleife aus Terminal lesen

#include <stdio.h> 

int main() 
{ 
     int count = 2; 
     int len = 5; 
     char str[count][len]; 

     for(int i = 0; i < count; i++) 
     { 
       fgets(str[i], len, stdin); 
       fflush(stdin); 
     } 
} 
+1

Wie haben Sie es überprüft? Versuchen Sie, den Wert von 'len' zu erhöhen. – BLUEPIXY

+1

'fflush (stdin);' ist undefined – artm

+2

Welche Eingaben geben Sie es? – doctorlove

Antwort

3

fflush(stdin); ist undefined behaviour. Benutze es nicht.

Ich denke, Ihr Problem ist, dass Sie die mehr len Zeichen eingeben und damit den zweiten Anruf an fgets() liest das Zeichen von dem ersten Anruf links. Erhöhen Sie einfach len ausreichend.

Sie sollten auch den Rückgabewert von fgets() auf Fehler überprüfen.

+0

Das stimmt, ich habe das Nullzeichen und die neue Zeile am Ende der Zeichenfolge nicht berücksichtigt. Was ist der Weg sie nicht zu speichern, damit ich am Ende mit dem Array ohne diese Zeichen arbeiten kann? –

+0

Sie benötigen das Nullbyte, wenn Sie es als C-String verwenden möchten. Wie bei newline, können Sie es von 'strcspn [str [i]," \ n "] = 0;'. –

+0

Ihr 'strcspn() 'Vorschlag benötigt etwas Glanz. 'str [i] [strcspn (str [i]," \ n ")] = '\ 0';' ist das, was du meintest, denke ich. –