【发布时间】:2016-07-06 10:25:24
【问题描述】:
// 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 准备扫描下一个文件名,这似乎是在做的。但是在扫描最终文件名之后,我希望嵌套的 scanf 不会扫描任何内容。然后外部scanf 也不扫描任何东西。而while循环退出。
为什么会这样?
【问题讨论】:
-
转换说明符末尾的
s不会像您认为的那样。 -
您可能需要检查例如this
scanf(and family) reference. -
我原以为只使用
fgets并修剪换行符会更容易。 -
奇怪的是,这段代码对我有用。我打开了
popen("ls -l", "r");,打印完所有文件后循环完成。
标签: c while-loop newline scanf