【问题标题】:How to find first bad number from float如何从浮点数中找到第一个坏数
【发布时间】:2015-03-23 21:05:16
【问题描述】:

我有这个问题:我正在输入要浮动的数字...我希望程序找出第一个数字不是来自特定间隔。 怎么做 ? 示例:输入输入:5 10 20 30 50 46。 30 无效。 问题是,printf 只是打印我的第一个浮点数,例如:10 20 30 40 50。10 无效......我预计“30 无效” 这是代码:

while(scanf("%f",&input)!=EOF || input==0){

sum=input+sum;
if (getchar() == '\n') break;
};

for (int i=0;i<14;i++)
{
if(input!=notes[i])
{
    printf("%f is invalid\n",input);
}

}

任何帮助表示赞赏:)

【问题讨论】:

  • 严格的比较运算符不适用于浮点数。 input != &lt;something&gt; 可能永远是真的
  • 谢谢。请问您有什么建议?
  • 不幸的是我不太明白你的问题。我刚刚指出了一些潜在的陷阱。
  • 用户如何知道“有效”输入数字序列由什么组成?

标签: c


【解决方案1】:

您可以将这些数字 100,50,20,... 保留在数组中,并使用 for 循环检查某个数字是否等于其中任何一个,如果是则数字有效,否则无效

【讨论】:

  • 感谢您的回复。所以我做了这样的事情:所以我现在将所有这些数字放在数组中。问题是,printf 只是打印我的第一个浮点数,例如:10 20 30 40 50。10 无效...我预计“30 无效”
  • 大多数数字(它们的整数)不会完全匹配任何浮点值。将它们写为浮点数或在输入上使用 'floor() 或 ceil() 或(更好)将数组中的数字写为浮点值 I.E. 100.0f, 50.0f, 20.0f, ...
【解决方案2】:

嗯,我找到了答案:

while(scanf("%f",&input)!=EOF || input!=0)
{
if (input == 0) break;
sum=input+sum;

    if(input!=100 &&input!=50 &&input!=20 &&input!=10 &&input!=5 &&input!=2 &&input!=1 &&input!=0.5 &&input!=0.2 &&input!=0.1 &&input!=0.05 &&input!=0.02 &&input!=0.01)
    {
            if (input ==  (int) input)  
       printf("%.0f is invalid!\n" ,input);
      else printf("%.2f is invalid!\n" ,input);
            exit(1);
    }


     if (getchar() == '\n') break;
};

无论如何,谢谢你的帮助:)!

【讨论】:

  • 1) 请在左大括号 '{' 后缩进,在右大括号'}' 后取消缩进 2) 使用 getchar() 是个问题,因为它会消耗标准输入中的下一个可用字符,它(通常) 将是下一个输入值的第一个字符。 3)浮点值(通常)不是某个整数的精确表示,(即 int 10 不等于浮点 10.0f)4)浮点值写为(例如)'100.0f'而不是'100'
  • 5) 始终检查 scanf(和 family)返回的值,以确保操作成功。使用:'while(scanf("%f",&input)!=EOF || input!=0)' 为例,scanf() 的返回值为 1,因为在格式化字符串。
  • 6) 请发布显示问题的可编译代码,以便我们帮助您调试问题。 7) 不要在发布的代码中使用制表符(也不要在您自己的代码中),因为制表符会插入不同数量的空白,具体取决于制表位的设置位置或编辑器设置的制表符宽度。
猜你喜欢
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
相关资源
最近更新 更多