[英]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 個選項:
顯式刷新
fflush<\/code>在每次寫入后從緩沖區中獲利,並且仍然顯式地強制執行期望的行為\/顯示。
- 讓緩沖區僅按行緩沖
當您知道僅打印完整行就足夠時很有用
- 禁用緩沖區
- 通過它提供的任何選項菜單禁用控制台中的緩沖<\/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;
}
a=5
I've read value 5.
PS:我只是浪費了 30 分鍾來查找這個 Eclipse 控制台問題和可能的修復方法,而對於任何尋找此類問題的人來說,這似乎是最直接且易於理解的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.