首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证满足以下条件的输入

验证满足以下条件的输入
EN

Stack Overflow用户
提问于 2013-08-19 00:24:35
回答 3查看 184关注 0票数 0

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

代码语言:javascript
复制
   scanf("%f",&k);   
   if(k>10.0 && k<100.0)
   scanf("%f",&k);
   else
   {
   ......//my code
   }

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

代码语言:javascript
复制
      #Input-10.@
      #Input-@

因为对于此输入,它不是转到else part,而是转到if part,而不是像这样的输入

代码语言:javascript
复制
       #Input-10 

是满意的。

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

EN

回答 3

Stack Overflow用户

发布于 2013-08-19 00:47:37

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

代码语言:javascript
复制
#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;
}
票数 2
EN

Stack Overflow用户

发布于 2013-08-19 00:44:56

你正在以另一种方式检查你的状况。颠倒这些标志,你就会变得很好。像这样:

代码语言:javascript
复制
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");

或者简化你的程序

代码语言:javascript
复制
do
{
    scanf("%f",&k);
}while(k<=10.0 || k>=100.0);
票数 1
EN

Stack Overflow用户

发布于 2013-08-19 03:33:16

编辑,正如Paul指出的,10.0可能不是一个正确的例子来解释这一点。

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

然后进行比较,如K>(10-增量) && K< (hundred+delta)

我相信这应该足够了。

所以,千万不要在没有小误差修正因子的浮点数/双精度数上进行关系运算!

下面是一个演示它的代码片段,http://ideone.com/dxS9OI

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18301220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档