我是Java程序员,最近开始学习C。我正在学习C语言,并用Eclipse(使用CDT)编写了一个示例程序。这是程序
#include <stdlib.h>
#include <stdio.h>
int main()
{
char card_name[3];
puts("Enter the card_name: ");
scanf("%2s",card_name);
int val = 0;
if(card_name[0] == 'K'){
val = 10;
}else if (card_name[0] == 'Q'){
val = 10;
}else if(card_name[0] == 'J'){
val = 10;
}else if(card_name[0] == 'A'){
val = 11;
}else{
val = atoi(card_name);
}
printf("The card value is: %i\n",val);
return 0;
}
当我在eclipse上运行它时,应执行包含puts的行,然后用户应在eclipse控制台中输入,然后执行scanf行。
但是不会那样做,当我运行它时,它只是希望用户首先在Eclipse控制台上输入,然后执行puts行,最后执行scanf行。我无法理解这种行为。有人可以帮我吗?
答案 0 :(得分:2)
根据输出缓冲的配置方式,您可能需要非常明确地说明何时实际制作输出。
通常,文本末尾的换行符就足够了,也就是说,您的环境中一定有一些特殊之处,我怀疑是Eclipse控制台,但这只是猜测。
尤其是尝试在一行中进行提示和阅读时,明智的做法是使用
/* ... */
puts("Enter the card_name: ");
fflush(stdout);
/* ... */
恰好在您需要已经发送的输出的地方。
在您的情况下,缓冲导致此顺序:
即scanf不会在第一个放置之前执行,只是延迟了可见效果。