Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > консольный ввод


Автор: schnaps 26.10.2010, 19:46
ребят, извините если проблема рассматривалась, некогда искать по форуму. 
итак, есть код


Код

// файл    main.cpp


// включаем заголовочный файл "main.h"
#include "main.h"

// определяем конструктор объекта, инициализирующий
// все данные объекта значениями аргументов
Person::Person (int        SetNumberPerson,
                char    SetFIO_Person [64],
                bool    SetSexPerson,
                float    SetAgePerson)
{
    NumberPerson = SetNumberPerson    ;
    strcpy (FIO_Person, SetFIO_Person);
    SexPerson   = SetSexPerson    ;
    AgePerson    = SetAgePerson        ;
}

Person::~Person()
{
}

Person::Person()
{
}

//определяем функцию void Person::Print()
void Person::Print()
{
    cout <<"\n\n Number of Person:    "<<NumberPerson<<endl;
    cout <<"\n FIO Person:        "<<FIO_Person<<endl;

// небольшое условие, чтоб выводился пол, а не цифра
    if (SexPerson==0)
        cout <<"\n Sex Person:        male";
    else    
        cout <<"\n Sex Person:        female";
    
    cout <<"\n\n Age Person:        "<< AgePerson<< endl;
}


    int        InputNumberPerson;
    char    InputFIO_Person[64];
    bool    InputSexPerson;
    float    InputAgePerson;
    int        MaleFemale;
    
    void    Person::Input()
    {    
        cout << "\nInput number Person :";
        cin  >> InputNumberPerson;

// НЕ ПОЛУЧАЕТСЯ НОРМАЛЬНО ВВЕСТИ ФИО... В ДАННОМ СЛУЧАЕ НЕ ВВОДИТСЯ ПЕРВАЯ БУКВА ФАМИЛИИ
        cout << "Input FIO Person :";
        cin     >>  InputFIO_Person[64];
        cin.getline (InputFIO_Person,64,'\n');


        cout << "Input sex Person(0 - male/1 - female) :" ;
        cin  >> MaleFemale;
        if (MaleFemale == 0)    //УСЛОВИЕ ДОБАВЛЕНО ТАК КАК ХЗ КАК ВВОДИТЬ BOOL
                InputSexPerson=0;
        else
            {
                if (MaleFemale == 1) InputSexPerson=1;
                else cout << "Input sex Person incorrect, maybe you a woman... :))) " <<endl;
            }

        cout << "Input age Person :" ;
        cin  >> InputAgePerson;
    }



int main()
{    

    Person Putin (2, "Putin Vladimir Vladimirovich" , 0, 58);
    Putin.Print();

    Person *Medvedev;
    Medvedev = new Person (3, "Medvedev Dmitriy Anatol'evich", 0, 45);
    Medvedev->Print();
    delete Medvedev;


    // ВЕРОЯТНО ТУТ МОГУТ БЫТЬ ОШИБКИ:
    Person *NEW;
    NEW = new Person();
    NEW->Input();    
    NEW = new Person(InputNumberPerson, InputFIO_Person, InputSexPerson, InputAgePerson);
    NEW->Print();
    delete NEW;



    getch();        //ожидание нажатия клавиши
    return 0;
}    



и что то непонятное происходит в метде Рerson::Input() собственно там коментарий и написан, проблема в том, что при вводе пропадает 1й символ. в чем может быть дело? спасибо заранее

Автор: Crafty 26.10.2010, 19:56
Удалите 57-ую строку.

Автор: Dimanich 26.10.2010, 20:54
57 строка методом втыка была добавлена... после чего хоть както работать начало...

Автор: bsa 26.10.2010, 21:44
Цитата(Dimanich @  26.10.2010,  21:54 Найти цитируемый пост)
57 строка методом втыка была добавлена...

Ты хоть понимаешь, что эта строка портит стек той самой потерянной буквой? Решение проблемы "потерянного символа" именно в убирании этой строки. Кстати, третий параметр у getline лишний, так как по умолчанию именно '\n' и используется.

Автор: Dimanich 26.10.2010, 22:15
повторюсь, что эта строка была добавлена от безнадеги... 
без    cin     >>  InputFIO_Person[64];   почемуто (почему до сих пор не ясно) вообще ввод не работает...

пробовалось закоментить всё Person::Input(),  и ввод организовать непосредственно в теле main() - таже фигня.

соответственно касяк гдето в конструкторе...

Автор: bsa 26.10.2010, 22:55
Конструктор следует переписать так:
Код
Person::Person (int        SetNumberPerson,
                const char *SetFIO_Person,
                bool    SetSexPerson,
                float    SetAgePerson)

Зачем Person::Input использует только внешние переменные? Более того, методы класса должны оперировать только СОСТОЯНИЕМ ОБЪЕКТА ЭТОГО. Т.е. метод Input должен менять только внутренние переменные класса.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)