【问题标题】:Trouble with input using scanf()使用 scanf() 输入问题
【发布时间】:2014-09-25 03:17:30
【问题描述】:

我是 C 新手,所以我在使用 scanf() 时遇到了一些麻烦。

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

int main()
{
int height;
int weight;

printf("Enter height in inches:\n");
scanf("%d", &height);

printf("Enter weight in pounds:\n");
scanf("%d", &weight);

printf("You are %d inches tall and weigh %d pounds.", height, weight);

return 0;
}

我很确定这是正确的语法,但是当我运行它时,它显示一个空白屏幕,在我输入 2 个数字后它显示:

64

120

以英寸为单位输入高度:

以磅为单位输入体重:

你身高 64 英寸,体重 120 磅。

根据一些教程,它应该在我输入第一个数字之前显示“以英寸为单位输入身高:”,在我输入第二个数字之前显示“以磅为单位输入体重:”。请帮帮我!

我正在使用 Eclipse 编写我的程序,并使用 MinGW 作为编译器(如果相关)。

【问题讨论】:

  • 您的症状与您的代码不符

标签: c scanf


【解决方案1】:

尝试使用 scanf_s 代替 scanf ,我刚刚运行它并且它起作用了。

【讨论】:

    【解决方案2】:

    它是bug in eclipse,大多数使用 eclipse 和 MinGW 的人都报告了这一点。

    为了解决这个问题,您可以在每次调用 printf 之后使用 fflush(stdout) 或在 main 的开头使用以下内容:

    setvbuf(stdout, NULL, _IONBF, 0);
    setvbuf(stderr, NULL, _IONBF, 0);
    

    这将导致stdoutstderr 在写入时立即刷新。

    【讨论】:

      【解决方案3】:

      我建议你使用 sscanf insted 的 scanf 并将 fgets 添加到顶部会更符合逻辑。

      应该是:

      int height;
      char buffer[32]; /*Add this to collect you data*/
      
      printf("Enter height in inches:\n");
      fgets(buffer,sizeof(buffer),stdin); /*Add this line to get value from keyboard*/
      sscanf(buffer,"%d", &height); /*Change scanf to sscanf*/
      

      和其他的一样

      【讨论】:

        【解决方案4】:

        我建议在 Windows 上使用 Putty 或在 Mac OSX 上使用命令行。使用“Wal Werror”编译器

        是的,在输入数字之前,您需要等待它显示输出。

        例如你运行程序 当这条线出现时

        Enter height in inches:
        

        然后输入

         64
        

        那么当它出现时

        Enter weight in pounds:
        

        然后输入

         120
        

        那么输出应该符合预期

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-22
          • 1970-01-01
          • 1970-01-01
          • 2021-11-17
          • 2018-03-05
          • 2018-08-04
          • 2014-02-23
          相关资源
          最近更新 更多