我的cpp程序没有要求输入。

时间:2016-11-07 03:40:17

标签: c++

我遇到过这个问题而无法理解它为什么不要求输入。 代码的输出是cin0。 请解释原因。

#include<iostream>
using namespace std;
int main ()
{
       int cin;
       cin >> cin;
       cout << "cin" << cin;
       return 0;
}

2 个答案:

答案 0 :(得分:2)

阴影。

  

int cin;
  cin&gt;&gt; CIN;

第二行中的cin都指的是int,而不是你习惯的类。您只需使用名为cin的变量计算a>>a(即大致相当于a / 2^a)。

选择其他变量名称。

答案 1 :(得分:2)

让我们逐行看一下。

int cin;

此行声明一个名为cin的局部变量。从现在开始,无论何时编写cin,编译器始终认为您的意思是本地变量,而不是输入流对象std::cin

cin >> cin;

该行读取局部变量并执行位移。当>>运算符的两边都是整数时,它不再意味着输入;这意味着现在有点转移。

但这不是重点。

重点是,局部变量cin未初始化并且已被读取。行为未定义。程序中的一个未定义行为可能导致整个程序的行为未定义。

另请注意,如果我们忽略未定义行为的问题,则位移的结果不会分配给任何内容,因此会丢失。

cout << "cin" << cin;

在没有初始化的情况下再次读取局部变量cin。这是另一行未定义的行为。

由于未定义的行为,不再有意义地说出它为什么输出cin0但是我们可以合理地想象局部变量cin的内存恰好包含零