【问题标题】:How to solve input duplicate problem In C [duplicate]如何在C中解决输入重复问题[重复]
【发布时间】:2019-08-26 03:01:25
【问题描述】:

当我输入基值时,c不会首先识别它

#include <stdio.h>

main(void)
{
    float base, height, area;

    printf("area of triangle=?\n");
    printf("base=");
    scanf("%f\n", &base);
    printf("height=");
    scanf("%f\n", &height);
    area = base*height / 2;

    printf("area = %f\n", area);

    return 0;
}

【问题讨论】:

    标签: c scanf


    【解决方案1】:

    您的代码中有两个主要问题。

    (1) 不要在格式说明符中包含'\n'"%f" 等格式说明符默认跳过 空格。所以使用(以#2为准):

    scanf("%f", &base)
    

    (2)通过检查所用输入函数的返回来验证每个用户输入。如果用户按'R' 我的错误到达'4' 键会发生什么?那会发生什么? (如果它是第一个数字 - 未定义的行为,因为您盲目地假设输入成功)。相反,验证返回,例如

        if (scanf("%f", &base) != 1) {
            fputs ("error: invalid float - base.\n", stderr);
            return 1;
        }
    

    总而言之,你可以这样做:

    #include <stdio.h>
    
    int main (void)
    {
        float base, height, area;
    
        fputs ("area of triangle=?\nbase=", stdout);
        if (scanf("%f", &base) != 1) {
            fputs ("error: invalid float - base.\n", stderr);
            return 1;
        }
        fputs ("height=", stdout);
        if (scanf("%f", &height) != 1) {
            fputs ("error: invalid float - height.\n", stderr);
            return 1;
        }
        area = base * height / 2.;
    
        printf ("\narea = %f\n", area);
    
        return 0;
    }
    

    (注意: nit - 如果不涉及转换,则无需使用可变参数 printf 函数,只需使用 fputs (或者如果您想要默认值,只需使用 puts '\n' 最后)。一个好的编译器会为你优化这个,但显示出对什么是适合这项工作的工具的理解是有好处的)

    使用/输出示例

    $ ./bin/trianglearea
    area of triangle=?
    base=3
    height=4
    
    area = 6.000000
    

    查看一下,如果您还有其他问题,请告诉我。

    【讨论】:

      【解决方案2】:

      Scanf 仅使用格式

      scanf("%f",&base);
      

      【讨论】:

      • 您需要解释您所做的更改以及原因。
      【解决方案3】:
      printf("base=");
      scanf("%f", &base);
      printf("\n");
      printf("height=");
      scanf("%f", &height);
      printf("\n");
      

      【讨论】:

      • 你需要解释你做了什么改变以及为什么。
      • 在 scanf() 之后打印新行。
      猜你喜欢
      • 2022-12-10
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      相关资源
      最近更新 更多