为什么printf(“提示符:”)不会立即打印?我尝试过fflush(stdout)并放置一个\ n,但这些都没有。它只在“看你”打印时打印:
int main() {
char line[1025];
char command[80], argument[80];
char argv[3][80];
int i, pid;
*(argv[2]) = '\0';
while((fgets(line, 1024, stdin))) {
printf("prompt:");
line[1024] = '\0';
sscanf(line, " %s %s ", command, argument);
if(strcmp(command, "exit") == 0 || strcmp(command, "hastalavista") ==
0) {
printf("See you\n");
exit(0);
}
}
return 0;
}
答案 0 :(得分:5)
标准I / O(即来自<stdio.h>
的函数)缓冲(通常是行缓冲的,特别是stdout
)。
您需要刷新它(例如通过调用fflush(stdout);
)
顺便说一下,您在 fgets
之前呼叫printf("prompt:");
。看起来不对劲。我建议在调用printf("prompt:"); fflush(stdout);
之前fgets
。
当然,你应该编译所有的警告&amp;调试信息(例如gcc -Wall -g
如果使用GCC)和使用调试器(例如gdb
)
最后,在POSIX系统上,您可以使用getline(3)。在Linux系统上,您甚至可以使用readline(3)。
使用sscanf,您最好测试其退货项目数(您可能希望使用%n
)。
您可能应该阅读有关终端的更多信息(至少在POSIX系统上),例如: tty demystified页面,以及line discipline。另见termios(3)&amp; I satty(3)
答案 1 :(得分:3)
while((fgets(line, 1024, stdin)))
: - 这意味着从stdin
读取并将内容放入line
。在收到EOF或换行符后,fgets
才会返回。这意味着,您的代码将等待,直到您按下&#34;输入&#34;键。
如果你不按它,它就不会继续打印&#34;提示&#34;。这就是延迟的原因!
而且,按Enter键之前输入的内容将存储在line
(最多1024个字节)