[英]C program display order
當我運行以下代碼時,它將在最后一行的第4行運行系統命令,然后在其前面顯示字符串“ proceeding”! 我想知道為什么以及如何解決它,有什么想法嗎?
if ((strlen(command)>0) && (command[strlen (command) - 1] == '\n'))
command[strlen (command) - 1] = '\0';
printf("proceeding"); // <-- the string
strcat(command,contents);
strcat(command,subject);
system(command); // <-- offending system command
sleep (1);
printf("\n ----- Search complete for: [%s]",command);
getchar();
當然,還有諸如“命令”和“主題”之類的變量,它們是在上面的代碼之外進行操作和聲明的,因此,如果需要上下文,我將在下面發布其余的源代碼。
拉動鏈條並沖洗:
即
后
printf("proceeding");
放
fflush(stdout);
這將沖洗緩沖區中的東西(碗!)
在執行系統命令之前。
嘗試在printf中添加一個'\\ n'。
它強制刷新printf緩沖區。 否則,沒有必要printf立即打印傳遞的參數。 您可以谷歌刷新緩沖區后者
stdout
是行緩沖的 ,因此它只會在到達換行符后顯示緩沖區中的內容
更改printf("proceeding");
到printf("proceeding\\n");
或用fflush(stdout);
刷新stdout
fflush(stdout);
會做的工作。
默認情況下,stdio stdout流是行緩沖或完全緩沖的。 要將其設置為無緩沖 (並避免在每次輸出操作后都必須寫fflush(stdout)
),請使用stdio.h
聲明的ISO C setvbuf
函數:
setvbuf(stdout, (char *)NULL, _IONBF, 0);
在執行第一個I / O之前一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.