// Some initialization code
dup2(fd[0], fileno(stdin));
// This process is receiving the output of "ls -1"
while (scanf("%[^\n]s", someCharArray) > 0) {
scanf("%*c");
printf("%s\n", someCharArray);
}
これですべてのファイルが正常に印刷されます。ただし、ループは終了しません。 scanf("%*c")
を取り除くと終了しますが、最初のファイル名だけが出力されます。改行文字を使うときにscanf whileループが終了しないのはなぜですか?
改行文字を消費すると、外側のファイル名scanf
が次のファイル名をスキャンする準備ができていると思います。しかし、最終的なファイル名がスキャンされた後、ネストされたscanf
は何もスキャンしないことが期待されます。その後、外側のscanf
は何もスキャンしません。 whileループは終了します。
どうしてですか?
変換指定子の最後にある 's'は、あなたが思うものは何もしません。 – EOF
あなたはchelしたいと思うかもしれません。 [この 'scanf'(および家族)のリファレンス](http://en.cppreference.com/w/c/io/fscanf)。 –
私はちょうど 'fgets'を使っていると思っていて、改行を取り除くほうが簡単でしょう。 – WhozCraig