2017-03-08 2 views
-2

Ich mache ein Projekt und ich muss Daten vom Terminal lesen.Eine Eingabe vom Terminal lesen

So wird das Programm normal gestartet und der Benutzer muss einige Anweisungen geben. Ich möchte, dass das Programm auf die Anweisungen des Benutzers wartet (im Terminal abgreift) und dann alle ausführt.

Ich kann nur die Funktion read verwenden, um den Eingang zu erhalten. Bisher fand ich die Art und Weise unten

int main (void) 
{ 
    char line[50]; 
    int ret; 

    printf ("\nEnter string below\n"); 
    while ((ret = read(0, line, 50)) != -1) 
    { 
     line[ret] = '\0'; 
     printf ("result %s\n", line); 
    } 
} 

Es funktioniert, aber ich möchte alle Anweisungen geben und dann, wenn sie Drücken von ENTER den Eingabemodus beenden und behandeln.

Ist es möglich? Auch gibt es einen gemeinsamen Weg, um die imput Modus STRG + D

Dank

+1

'imput'? : D gut. –

+1

Sie verwenden nicht die "read" -Funktion, Sie verwenden die "getline" -Funktion. Überprüfen Sie dies mit Ihrem Lehrer oder was auch immer. –

+1

Ja, es ist möglich. Es ist unklar, wie Sie die Eingabeinformationen verwalten möchten oder was sie darstellen. Wenn Sie sie jedoch als einzelne Zeichenfolgen verwalten möchten, können Sie ein Array von Zeichenfolgen verwenden (oder ein Array von Zeichenzeigern, die auf dynamisch zugewiesene Zeichenfolgenpuffer verweisen). . – lurker

Antwort

1

Ich denke, Sie sollten

while (read(0, line, 50) > 0) 
    printf("%s\n", line); 

beenden tun, aber wenn Sie dies tun, werden Sie Schwierigkeiten haben, wenn Sie haben zum Beispiel die erste Eingabe mit 42 Zeichen und die zweite Eingabe mit 30, weil die Lesefunktion den "Zeilenpuffer" nicht zurücksetzt. Verwenden Sie memset, wenn Sie können oder machen Sie Ihre eigene Funktion, es zu tun!

Warum> 0 und nicht! = -1: Weil read -1 liefert, wenn es ein Fehler ist und 0, wenn es das Ende der Eingabe ist.

Verwandte Themen