none
Необходима помощь RRS feed

  • Вопрос

  • При написании такого обычного (простого) кода: 

    #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, т.е. именно то, чем отладчик "забивает" свободную память в стеке. Таким образом, туда, действительно, ничего не записывалось.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!





    11 октября 2016 г. 18:57

Все ответы

  • name имеет тип int, то есть число.

    Замените на строку, вроде это было char* name;

    11 октября 2016 г. 18:09
  • С чем это связано?

    Это связано с тем, что локальная переменная name осталась не инициализированной. В ней как был "мусор" после ее создания, так и остался. А не инициализирована она потому, что операция >> была прервана некорректной интерпретацией вводимых Вами символов. В переменную целого типа нельзя записать строку! Введите с клавиатуры только цифры и увидите их в строке "Your name...".

    Для того чтобы ввести строку name должна быть массивом символов, а не указателем, который ничем не инициализирован, как Вам тут уже насоветовали :)

    char name[100];

    Р.s. А -858993460 это, 0xCCCCCCCC, т.е. именно то, чем отладчик "забивает" свободную память в стеке. Таким образом, туда, действительно, ничего не записывалось.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!





    11 октября 2016 г. 18:57