怎么来printf("提示:")不会立即打印?我尝试过fflush(stdout)并放置一个\n,但这些都没有.它仅在"See you"打印时打印:
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;
}
Run Code Online (Sandbox Code Playgroud)
标准I/O(即函数<stdio.h>)被缓冲(并且通常是行缓冲的,特别是用于stdout).
你需要冲洗它(例如通过调用fflush(stdout);)
顺便说一下,你fgets 以前 打过电话printf("prompt:");.看起来不对劲.我建议printf("prompt:"); fflush(stdout); 在打电话之前fgets.
当然,您应该编译所有警告和调试信息(例如,gcc -Wall -g如果使用GCC)并使用调试器(例如gdb)
最后,在POSIX系统上,你可以使用getline(3).在Linux系统上,您甚至可以使用readline(3).
使用sscanf,您最好测试其返回项目数(您可能想要使用%n).
您可能应该阅读更多关于终端(至少在POSIX系统上),例如tty揭秘页面和线路规则.另见termios(3)和我satty(3).