验证以下条件的输入

Validate input for the following condition

本文关键字:输入 条件 验证      更新时间:2023-10-16

我遇到一个问题,它将float作为输入,并检查输入是否在10到100之间,否则再次输入。问题的其余部分遵循这个易于求解的k值。但我遇到的真正问题是验证。

   scanf("%f",&k);   
   if(k>10.0 && k<100.0)
   scanf("%f",&k);
   else
   {
   ......//my code
   }

但当我提交时,它给出了错误的答案——真正的问题是

      #Input-10.@
      #Input-@

因为对于这个输入,而不是去其他部分,它通过这样的输入去了if部分

       #Input-10 

很满意。

有人能给我这个问题的解决方案吗?在这个范围内,浮点和整数类型的输入只满足,否则不满足。

您混淆了比较运算符(似乎只有在获得有效输入而不是无效输入时才重试)。此外,您只重试一次,但我怀疑您希望继续重试,直到获得有效的输入。这就是你可以做到的:

#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
  double k;
  do{
    cin>>k;
  }while(k<=10||k>=100);
  //the rest of your code goes here
  return 0;
}

您正在以另一种方式检查您的条件。颠倒这些标志,你就会变好。类似:

if(k<=10.0 || k>=100.0) //if(k<10.0 || k>100.0) If you want to include 10 and 100
    printf("invalid input range");

或者简化您的程序

do
{
    scanf("%f",&k);
}while(k<=10.0 || k>=100.0);

正如Paul所指出的那样,编辑10.0可能不是解释这一点的正确示例。

您不能不使用===<或>操作人员在使用浮子时安全操作。原因是,当输入为1.1时,当使用非整数类型时,数字不会是1.10000000000000000。因此,定义一个特定的误差阈值delta,它可以是两个最近的浮点之间的最佳分辨率。所以,如果你的10是一个计算值,而不是硬编码的,float ten=getXX(someinput);假设getXX()根据一些计算返回一些结果float 100=getXX(someinput);

然后像K>(十个Δ)&amp;K<(百+德尔塔)

我相信这就足够了。

因此,如果没有小的纠错因子,千万不要对浮点/双精度执行关系运算!

下面是一个演示片段http://ideone.com/dxS9OI

#include <stdio.h>
int main(void) {
    float eleven=11.0;
    float one_dot_1=1.1;
    float elevenUsingSummation = 0;
    int i=0;
    for(i=0; i<10; i++)
    {
        elevenUsingSummation+=one_dot_1;
    }
    printf("------------------------------n"
        "Floating point testing example n"
    "one_dot_1(2.10)=%2.10f, one_dot_1(2.20)=%2.20fn"
    "eleven(2.10)=%2.10f, eleven(2.20)=%2.20fn"
    "elevenusingsubmission(2.10)=%2.10f, elevenusingsubmission(2.20)=%2.20fn"
    "(elevenUsingSummation==eleven) evaluates to %sn",
    one_dot_1, one_dot_1, eleven, eleven, elevenUsingSummation, elevenUsingSummation,
    elevenUsingSummation==eleven?"True":"False"
    );
    return 0;
}