【问题标题】:Why does order matter in scanf command in C programming?为什么 C 编程中 scanf 命令的顺序很重要?
【发布时间】:2021-03-26 06:44:12
【问题描述】:
#include <stdio.h>

void main() {
    int i;
    char x;
    float y;
    double z;

    //line1 
    printf("enter an integer");
    scanf("%d", &i);

    //line3
    printf("enter a character");
    scanf("%c", &x);

    printf("enter a floating point");
    scanf("%f", &y);

    printf("enter a double");
    scanf("%lf", &z);

    printf("Integer is %d \n character is %c \n floating point is %f \n double is %lf ",
           i, x, y, z);
}         

我的问题是,当我运行此代码时,它不会提示输入字符值并跳到下一个命令。但是,如果我将第 3 行与 1 交换,即如果我先提示输入字符然后输入整数,那么它可以正常工作。请帮我理解这个问题。

【问题讨论】:

  • 不是您要的,但您可能还想在提示末尾添加换行符,或者,如果您不想要换行符,则明确fflush()stdout,否则您可以运行进入输出缓冲,防止您的提示出现在控制台上。
  • 这么多重复!

标签: c types character scanf


【解决方案1】:

大多数scanf 格式说明符会跳过前导空格(如换行符),但%c 不会(它应该能够读取空格)。

这意味着从您为上一个输入按下的 Enter 键添加到输入缓冲区的换行符将被%c 格式读取。

要跳过前导空格,您需要在格式字符串中添加一个空格:

scanf(" %c",&x);
//     ^
// Note leading space here

【讨论】:

  • 知道了!它现在正在工作......非常感谢你?
【解决方案2】:

scanf 的调用中为char 类型的对象使用以下格式字符串。

scanf(" %c",&x);
      ^^^

否则此调用(没有前导空格)将读取例如对应于输入键 Enter 的空白字符。

【讨论】:

    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多