【问题标题】:while() loop to ask for positive inputwhile() 循环请求正输入
【发布时间】:2013-09-06 02:39:48
【问题描述】:

我正在编写一个函数,要求用户输入,然后检查该输入是否实际上是一个正数,如果不是,它会循环直到输入一个正数,然后返回该值。这是我到目前为止所拥有的,但是当它返回时,我得到了一个奇怪的数字,比如 20204421.000 有什么帮助吗?

/* Checks if rate is infact positive and loops until a positive number is inputed */
int checkposrate(int rentrate) 
{
    while (rentrate < 0){
        printf("Please enter the anual rental rate per square foot(must be positive number):");
        scanf("%f",&rentrate);
    }
    return rentrate;
 }

【问题讨论】:

    标签: c while-loop scanf


    【解决方案1】:

    您应该使用scanf("%d", &amp;rentrate); 来获取整数值。 "%f" 用于输入浮点数。

    如果您想了解有关scanf() 工作原理的更多信息,请联系you can take a look in here

    【讨论】:

      【解决方案2】:

      有点离题,但我不喜欢这样的声明:你根本没有使用rentrate 作为输入,所以它不应该是一个参数。

      int checkposrate() {
          int rentrate;
      

      其次,正如其他人所说,您需要 %d 代替,但我实际上会使用 %u - 它只接受正整数。如果您将rentrate 设置为等于0,那么它仅在用户输入有效的无符号整数时由scanf 设置,并为您留下此代码。请注意,这假定零不是有效的正数:

      /* Checks if rate is in fact positive and loops until a positive number is read from input */
      unsigned int checkposrate() 
      {
          unsigned int rent_rate = 0;
          while (rent_rate <= 0){
              printf("Please enter the annual rental rate per square foot (must be a positive integer): ");
              scanf("%u",&rent_rate);
          }
          return rent_rate;
      }
      

      另一方面,如果您确实想要分数租金,那么您的 %f 是正确的,但您的代码中的变量类型错误:

      double checkposrate() {
          double rent_rate = -1.0;
          while (rent_rate < 0.0 && rent_rate) {
              printf("Please enter the rental rate per sq ft: ");
              scanf("%lf", &rent_rate);
          }
          return rent_rate;
      }
      

      【讨论】:

      • 评论你的题外话:他正在使用C,所以你应该使用声明int checkposrate(void)
      【解决方案3】:

      %f 用于浮点数(例如floatdouble)。你应该改用%d

      另外,就像@K-ballo 提到的,你的逻辑是错误的。您应该使用do {}while 循环,因为您希望在做出第一选择之前先从用户那里获得输入。

      do
      {
         ..
         scanf("%d", &rentrate);
      }while (rentrate <= 0);
      

      【讨论】:

        【解决方案4】:

        reentrate 被声明为整数,我想你想要

            scanf("%d",&rentrate);
        

        不是

            scanf("%f",&rentrate);
        

        【讨论】:

          猜你喜欢
          • 2021-11-21
          • 1970-01-01
          • 2013-11-16
          • 2020-02-15
          • 2015-12-11
          • 2018-03-23
          • 2013-04-10
          • 1970-01-01
          • 2016-01-07
          相关资源
          最近更新 更多