私はここにスペースを含む文字列を入力するときに望ましくない動作をするコードを持っています。例:print illegal_argument
。複数の単語を含む入力が来たら、最初の単語だけを登録したいと思います。現在、何が起こるScanfの入力が次のscanfに引き継がれます
は次のとおりです。
[email protected] $ print 0
Enter router ID for information > ID: 0, flag: f7, model_length: 13, model: D-Link y6000
それは、コマンド・ループで比較するための最初のprint
を登録します。しかし、ユーザに次の入力を促すscanf
の代わりに、それは無視され、前のscanf
からのユーザによって入力された2番目の単語/番号を取ります。それ以外の場合は意図したとおりに
[email protected] $ print 0
Enter router ID for information > 0
ID: 0, flag: f7, model_length: 13, model: D-link y6000.
すべてが動作しますが、これを行うための簡単な方法があります場合、私は疑問に思う:
は何が起こるたいのです。 Strtokを使ってみましたが、大したことはありませんでした。
char input[256];
printf("%[email protected] $ ", getenv("USER"));
scanf("%s", input);
if(strcmp(input, "print") == 0) {
print();
}
上記のコードは、ユーザーからの入力方法です。
誰でもアイデアがありますか?
入力行全体が必要なときは、 'scanf'を使わず、代わりに' fgets'を使います。 –
@OlafDietsche私が間違っていない限り、 'fgets(input、256、stdin)'を試しても動作しません。 '$ print'を実行すると、':command not found.'が生成されます。 –
@Christian S 'fgets(input、256、stdin)'が動作します。コード内の他のものも変更する必要があります。 http://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input – chux