0

我遇到了一个问题,它float作为输入并检查输入是否在 10 到 100 之间,否则再次输入。剩下的问题遵循这个很容易解决的 k 值。但我遇到的真正问题是验证。

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

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

      #Input-10.@
      #Input-@

因为对于这个输入,而不是去 else 部分,它去 if 部分虽然输入像

       #Input-10 

很满意。

任何人都可以给我解决这个问题的方法,这个范围内的浮点和整数类型的输入只满足,否则不满足。

4

3 回答 3

2

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

#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;
}
于 2013-08-18T16:47:36.660 回答
1

你正在反过来检查你的条件。反转标志,你会很好。喜欢:

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);
于 2013-08-18T16:44:55.717 回答
0

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

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

然后像 K > (ten-delta) && K < (hundred+delta) 那样做比较

我相信这应该足够了。

所以,千万不要在没有小的纠错因子的情况下对浮点数/双精度数进行关系运算!

这是一个片段来演示它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.20f\n"
    "eleven(2.10)=%2.10f, eleven(2.20)=%2.20f\n"
    "elevenusingsubmission(2.10)=%2.10f, elevenusingsubmission(2.20)=%2.20f\n"
    "(elevenUsingSummation==eleven) evaluates to %s\n",
    one_dot_1, one_dot_1, eleven, eleven, elevenUsingSummation, elevenUsingSummation,
    elevenUsingSummation==eleven?"True":"False"
    );

    return 0;
}
于 2013-08-18T19:33:16.047 回答