2016-04-16 4 views
-1

Ich habe Probleme mit fgets() und strtok(), um eine Eingabe zu erhalten und sie entsprechend aufzuteilen.Wie verwende ich fgets und strtok, um mehrere Eingaben zu erhalten?

Angenommen, ich habe ein Hauptmenü, das Eingang 1-9 nimmt, und jeder Eingang führt zu einer anderen Funktion. Ich habe das mit nur if-Anweisungen und einer break-Anweisung für jede Funktion getan. Nehmen wir an, es gibt einen anderen Befehl, der einen String, dann ein Leerzeichen und dann zwei Ints verwendet. Wie würde ich das in meinem Menü schreiben?

Das ist jederzeit im Menü, es kann nur einzelne Ints lesen (1-9) und lesen Sie auch sagen "start 5,9,forward" oder "start ,4,2,backwards" in diesem Menü. Schreibe ich eine Logik, die sagt, wenn "Start" eingegeben wird, gehen Sie weiter, aber ich weiß nicht, wie es zu machen, so dass es dann für die Eingabe nach dem Start lesen und lesen Sie die 2-Zoll-und die letzte Zeichenfolge.

Tut mir leid, wenn meine Frage etwas verwirrend ist, aber ich möchte nur ein Beispiel kennen, wenn ich mehrere Eingaben in einer Zeile bekomme und in der Lage bin, diese Eingabevariablen zu manipulieren.

+0

Vielleicht möchten Sie 'char buf [256], * p; fgets (buf, sizeof buf, stdin); p = strtok (buf, ","); while (p) {setzt (p); p = strtok (NULL, ","); } '? –

Antwort

1

Mit fgets und strtok:

Es ist ziemlich viel, was @Cool Guy sagte.

... 
fgets(buff, sizeof buff, stdin); 
char a[25], d[25]; 
int b, c; 
char *p = strtok(buff, ", "); //this will cut the input at an occurrence of `,` or `' '`, whatever happens first. At this point you would have the string "start" pointed by `p`. 
strcpy(a, p); 
p = strtok(NULL, ", "); 
if(p) { 
    b = atoi(p); 
    if(b < 0 || b > 9) { 
     //input error 
    } 
} 
p = ... 

Der Rest ist analog.

Mit scanf Lösung:

Sie die Eingabe lesen kann scanf mit (ja, es ist eine leistungsfähige Funktion).

scanf(" %N[^,' '] ,%1d%*[^,' '] ,%1d , %N[^\n]", a, &b, &c, d); 

" %N[^,' ']" den Eingang bis zum ersten , oder ' ' (Leerzeichen) gelesen erreicht ist. Ersetzen Sie auch N durch die Größe a - 1;

%1d%*[^,' '] wird eine Ganzzahl mit einer Ziffer lesen und den Rest der Eingabe verwerfen, bis eine , gefunden und in b gespeichert wird;

%N[^\n] wird den Rest der Zeile lesen und in d speichern. Ersetzen Sie N durch die Größe d - 1.

Es gibt Tonnen von Tricks, die Sie mit scanf verwenden können. Bitte beachten Sie, dass in diesem Fall alle Leerzeichen innerhalb des scanf-Formats wichtig sind. Auch, ich bin nicht der Fall behandelt, wo ein Benutzer ein falsches Eingabeformat eingibt, aber es ist möglich.

+1

Wenn Sie speziell mit 'fgets' und' strtok' arbeiten möchten, lassen Sie es mich wissen und ich werde meine Antwort bearbeiten. – ddz

+0

Ja ich möchte es mit fgets und strtok – ProgrammingNoob

+0

@ProgrammingNoob fertig sein. – ddz

Verwandte Themen