簡體   English   中英

C程序顯示順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM