Лучший отвечающий
Необходима помощь

Вопрос
-
При написании такого обычного (простого) кода:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
setlocale(0,"Russian");
int name;
cout<<"Enter your name:";
cin>>name;
cout<<"Your name"<<name<<endl;
_getch();
return 0;
}
после компиляции выходит такой объектный код:
Enter your name: (Ввожу любое имя)
Вывод: Your name -858993460
Причем, в любом коде, после компиляции, где необходимо ввести название (либо имя), выводится такое значение -858993460.
С чем это связано?
11 октября 2016 г. 11:38
Ответы
-
С чем это связано?
Это связано с тем, что локальная переменная name осталась не инициализированной. В ней как был "мусор" после ее создания, так и остался. А не инициализирована она потому, что операция >> была прервана некорректной интерпретацией вводимых Вами символов. В переменную целого типа нельзя записать строку! Введите с клавиатуры только цифры и увидите их в строке "Your name...".
Для того чтобы ввести строку name должна быть массивом символов, а не указателем, который ничем не инициализирован, как Вам тут уже насоветовали :)
char name[100];
Р.s. А -858993460 это, 0xCCCCCCCC, т.е. именно то, чем отладчик "забивает" свободную память в стеке. Таким образом, туда, действительно, ничего не записывалось.
Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!
- Изменено kosuke904 11 октября 2016 г. 19:05
- Предложено в качестве ответа Alexander RusinovModerator 11 октября 2016 г. 20:41
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 7 ноября 2016 г. 9:42
11 октября 2016 г. 18:57
Все ответы
-
name имеет тип int, то есть число.
Замените на строку, вроде это было char* name;
11 октября 2016 г. 18:09 -
С чем это связано?
Это связано с тем, что локальная переменная name осталась не инициализированной. В ней как был "мусор" после ее создания, так и остался. А не инициализирована она потому, что операция >> была прервана некорректной интерпретацией вводимых Вами символов. В переменную целого типа нельзя записать строку! Введите с клавиатуры только цифры и увидите их в строке "Your name...".
Для того чтобы ввести строку name должна быть массивом символов, а не указателем, который ничем не инициализирован, как Вам тут уже насоветовали :)
char name[100];
Р.s. А -858993460 это, 0xCCCCCCCC, т.е. именно то, чем отладчик "забивает" свободную память в стеке. Таким образом, туда, действительно, ничего не записывалось.
Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!
- Изменено kosuke904 11 октября 2016 г. 19:05
- Предложено в качестве ответа Alexander RusinovModerator 11 октября 2016 г. 20:41
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 7 ноября 2016 г. 9:42
11 октября 2016 г. 18:57