Ich habe hier einen Code, der einige unerwünschte Verhalten bei der Eingabe von Zeichenfolgen mit Leerzeichen hat. zB print illegal_argument
. Wenn eine Eingabe mit mehreren Wörtern kommt, möchte ich, dass nur das erste Wort registriert wird.Scanf Eingang überträgt zum nächsten scanf
Was derzeit geschieht, ist:
[email protected] $ print 0
Enter router ID for information > ID: 0, flag: f7, model_length: 13, model: D-Link y6000
Es registriert die erste print
für den Vergleich in der Befehlsschleife. Aber anstatt scanf
den Benutzer für die nächste Eingabeaufforderung aufzufordern, ignoriert es stattdessen dies und nimmt das zweite Wort/die Nummer, die von dem Benutzer von dem vorherigen scanf
eingegeben wird, an.
Was ich will geschehen ist:
[email protected] $ print 0
Enter router ID for information > 0
ID: 0, flag: f7, model_length: 13, model: D-link y6000.
Alles sonst wie vorgesehen funktioniert, aber ich frage mich, ob es ein einfacherer Weg, dies zu tun. Ich habe versucht, Strtok zu benutzen, ohne viel Glück.
char input[256];
printf("%[email protected] $ ", getenv("USER"));
scanf("%s", input);
if(strcmp(input, "print") == 0) {
print();
}
Der obige Code ist, wie ich die Eingabe vom Benutzer erhalten.
Wer hat irgendwelche Ideen?
Wenn Sie die gesamte Eingabezeile verwenden möchten, verwenden Sie nicht "scanf", sondern "fgets". –
@OlafDietsche Probieren 'fgets (input, 256, stdin)' funktioniert nicht, es sei denn, ich mache etwas falsch. Der Versuch, '$ print' zu erzeugen, erzeugt': command not found.'. –
@Christian S 'fgets (Eingabe, 256, stdin)' funktioniert. Andere Dinge im Code müssen sich ebenfalls ändern. Siehe http://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input – chux