C语言:从Eclipse控制台扫描输入

时间:2018-08-05 06:03:12

标签: c

我是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行。我无法理解这种行为。有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

根据输出缓冲的配置方式,您可能需要非常明确地说明何时实际制作输出。
通常,文本末尾的换行符就足够了,也就是说,您的环境中一定有一些特殊之处,我怀疑是Eclipse控制台,但这只是猜测。 尤其是尝试在一行中进行提示和阅读时,明智的做法是使用

/* ... */
puts("Enter the card_name: ");
fflush(stdout);
/* ... */

恰好在您需要已经发送的输出的地方。

在您的情况下,缓冲导致此顺序:

  • 将提示放入输出缓冲区
  • 环境配置为不立即自动输出
  • (这是我建议冲洗以获取输出的地方)
  • scanf被执行
  • 用户输入
  • 您的程序虽然完全执行,但没有任何可见的内容
  • 将最终消息放入输出
  • 结束程序会导致最终输出缓冲的所有内容

即scanf不会在第一个放置之前执行,只是延迟了可见效果。