Для следующего кода:
#include<iostream>
using namespace std;
int main ()
{
int cin;
cin >> cin;
cout << "cin : " << cin;
return 0;
}
Я ожидал, что вывод будет:
cin : <input>
Но вывод:
cin : <junk value>
Для следующего кода:
#include<iostream>
using namespace std;
int main ()
{
int cin;
cin >> cin;
cout << "cin : " << cin;
return 0;
}
Я ожидал, что вывод будет:
cin : <input>
Но вывод:
cin : <junk value>
ОК, давайте разберем ваш код (предположительно using namespace std
):
#include <iostream>
using namespace std;
int main ()
{
int cin; // Shadows the declaration of cin coming from the iostream header
cin >> cin; // A bit shift operation on variable cin without capturing the result
cout << "cin" << cin; // Output of the non initialized variable cin
return 0;
}
cin
в cin >>
относится к std::cin
.
- person juanchopanza; 27.06.2017
using namespace std;
?
- person juanchopanza; 27.06.2017
using std::cin;
?
- person juanchopanza; 27.06.2017
using std::cout
, но на самом деле вам не нужно меня убеждать. ОП пропускает mcve и не может ответить должным образом как есть. И на самом деле, даже если бы у него было using namespace std;
, плохая вещь в том, что это плохой выбор имен переменных, а проблема с использованием просто второстепенна, имхо.
- person 463035818_is_not_a_number; 27.06.2017
cin
затеняет глобальный cin
- person Mgetz; 27.06.2017
using namespace std;
. Я согласен с тем, что вопрос следует сначала улучшить, прежде чем на него можно будет правильно ответить, но я думаю, что вы немного слишком остро реагируете
- person 463035818_is_not_a_number; 27.06.2017
Хорошо, это ваша возможность присоединиться к белой стороне силы и прекратить использовать using namespace std;
Следующий пример отлично работает для входов int
:
#include <iostream>
int main ()
{
int cin;
std::cin >> cin;
std::cout << "cin: " << cin;
return 0;
}
Почему? В вашем примере ваше локальное имя int cin
будет иметь преимущество перед cin
из std
и заставит вашу программу использовать UB с использованием переменной int
без инициализации.
И хороший совет, но офтоп может заключаться в том, чтобы проверить результат std::cin::operator >>
с помощью failbit, подобного этому ссылка
using namespace std;
- person Rama   schedule 27.06.2017int x; x >> x; cout << x;
, что не имеет смысла. С другой стороны,std::cin >> cin
будет работать. - person HolyBlackCat   schedule 27.06.2017using namespace std;
- person 463035818_is_not_a_number   schedule 27.06.2017