相同的输入但不同的输出不同结果的方式?

时间:2018-08-13 05:34:09

标签: c++

#include <iostream>

using namespace std;

int main()
{
   int a, b;

   cin >> a >> b;

   //First type of output
   //cout << a << endl << b << endl;


   //Second type of output
   cout << "A: " << a << endl << "B: " <<  b << endl;

   return 0;
}

仅是简单的输入和输出,对于输入,如果仅输入“ a”,则将输出第一种类型 0 6422368

当输入相同时,第二个输出将输出 答:0 B:-2

任何人都可以解释原因吗?

2 个答案:

答案 0 :(得分:3)

这就是所谓的未定义行为。

当您输入字符'a'时,实际上应该是整数。该字符“ a”保留在流上,以供任何其他输入操作读取。同时,两个变量int a, b;都保持未初始化状态,使用未初始化的变量始终会导致未定义的行为。您得到的输出是未定义行为的示例。

答案 1 :(得分:3)

从在线cpp reference on Uninitialized variables

  

可以创建没有值的变量。这是非常危险的,但是在某些情况下可以提高效率。   要创建没有初始值的变量,只需不包含初始值:

// This creates an uninitialized int
int i;
  

未初始化变量中的值可以是任何值–不可预测,并且每次运行程序时都可能不同。读取未初始化变量的值是未定义的行为-这始终是一个坏主意。必须先使用一个值对其进行初始化,然后才能使用它。

#include <iostream>
int main()
{
    int i; // uninitialized variable
 
    // WARNING: This causes undefined behaviour!
    std::cout << i << '\n';
 
    i = 23; // initializing the variable
 
    // Now it is safe to use.
    std::cout << i << '\n';
 
    return 0;
}
  

上面示例中第一行上显示的值可以是任何值。