令人困惑的C程序行为,printf

use*_*850 -4 c printf

怎么来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)

Bas*_*tch 5

标准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).