簡體   English   中英

scanf() 問題之前的 C/C++ printf()

[英]C/C++ printf() before scanf() issue

我正在使用 Eclipse 以 C\/C++ 編寫代碼,並且我正在努力解決可能非常簡單的事情。 在下面的代碼中,我使用printf()<\/code>和scanf()<\/code>之后。 盡管printf<\/code>在scanf()<\/code>之前寫入,但輸出不同。 我能夠在這里<\/a>找到有關類似問題的信息。 但我無法解決它。 有任何想法嗎?

代碼:

#include <stdio.h>

int main()
{
    int myvariable;

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}

您的輸出正在被緩沖。 您有 4 個選項:

  1. 顯式刷新

    fflush<\/code>在每次寫入后從緩沖區中獲利,並且仍然顯式地強制執行期望的行為\/顯示。

  2. 讓緩沖區僅按行緩沖

    當您知道僅打印完整行就足夠時很有用

  3. 禁用緩沖區

  4. 通過它提供的任何選項菜單禁用控制台中的緩沖

    <\/li><\/ol>


    例子:<\/h3>

    這是您使用選項 1 的代碼:

    這是2:

    和 3:

好的,所以最后我使用了類似於 @zsawyer 寫的東西作為標記為 3 的選項。在我的代碼中,我插入了這一行:

setvbuf(stdout, NULL, _IONBF, 0);

快速而輕松,我剛剛定義了一個名為“eprint”的宏來在調用printf(...)之后添加一個flush( )並且我只使用下面的 eprint 宏:

#define eprintf(...) printf(__VA_ARGS__); \
                 fflush(stdout);      \

示例代碼在這里:

#include <stdio.h>
#include <stdlib.h>

#define eprintf(...) printf(__VA_ARGS__); \
                     fflush(stdout);      \

int main(void) {
    int a;

    eprintf("a=");

    scanf("%d",&a);

    eprintf("I've read value %d.\n",a);

    return EXIT_SUCCESS;
}

Eclipse 控制台輸出:

a=5
I've read value 5.

PS:我只是浪費了 30 分鍾來查找這個 Eclipse 控制台問題和可能的修復方法,而對於任何尋找此類問題的人來說,這似乎是最直接且易於理解的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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