我为“a”传递浮点值得到了奇怪的输出

Posted

技术标签:

【中文标题】我为“a”传递浮点值得到了奇怪的输出【英文标题】:I get weird output for passing float value for 'a' 【发布时间】:2018-06-25 02:56:57 【问题描述】:

在下面的程序中,如果尝试将浮点值分配给变量“a”,我会在输出的第二行得到奇怪的值,这与“a”无关。

这是我的代码:

#include <iostream>

using namespace std;

void add( int , int );
void add( float , int );

int main()

  int a, b;
  float c;

cout << "Enter a, b, c - ";
cin >> a >> b >> c ;

add( a , b );
add( c, b );

return 0;


 void add( int a, int b)
    cout << "a + b = " << a + b << endl;
 

void add( float a, int b)
  cout << "b + c = " << a + b << endl;

示例输入:

2.4 2 2

样本输出:

a + b = 2

b + c = 4.59121e-41

我加了

cout

在调用函数之前,这一行给出了

2

0

4.59135e-41

请解释这个输出。为什么 b=0?

【问题讨论】:

你不检查cin &gt;&gt; a &gt;&gt; b &gt;&gt; c ;是否成功。如果它失败了,你就是在垃圾上操作。 究竟是什么让您认为您可以在您的程序希望读取一个整数时输入一个浮点值? 你不觉得2.4 + 2 = 2很奇怪吗?始终初始化您的变量,并检查输入是否成功。 【参考方案1】:

当代码将一个值读入int 并且输入为2.4 时,它会读取2 然后到达小数点并停止;小数点不是整数输入的有效字符。所以a 得到值2。然后代码尝试将下一个整数值读入b,但失败了,因为没有数字,只有小数点。之后,由于之前的失败,任何进一步的读取尝试也将失败。

【讨论】:

以上是关于我为“a”传递浮点值得到了奇怪的输出的主要内容,如果未能解决你的问题,请参考以下文章

SSE 移位指令在后续指令中导致奇怪的输出 (-1.#IND00)?

c ++函数在返回时将浮点值转换为NaN

按值传递参数时的奇怪行为

C++ 将字符串转换为整数;得到奇怪的输出?

C++ GTKMM,在文本缓冲区中得到一个奇怪的输出

下拉输入元素行为奇怪,而不是将值传递给“search.php”页面