Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> консольный ввод 
:(
    Опции темы
schnaps
Дата 26.10.2010, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



ребят, извините если проблема рассматривалась, некогда искать по форуму. 
итак, есть код


Код

// файл    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й символ. в чем может быть дело? спасибо заранее

PM MAIL   Вверх
Crafty
Дата 26.10.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Удалите 57-ую строку.
PM MAIL   Вверх
Dimanich
Дата 26.10.2010, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.10.2010

Репутация: нет
Всего: нет



57 строка методом втыка была добавлена... после чего хоть както работать начало...
PM MAIL   Вверх
bsa
Дата 26.10.2010, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



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

Ты хоть понимаешь, что эта строка портит стек той самой потерянной буквой? Решение проблемы "потерянного символа" именно в убирании этой строки. Кстати, третий параметр у getline лишний, так как по умолчанию именно '\n' и используется.
PM   Вверх
Dimanich
Дата 26.10.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.10.2010

Репутация: нет
Всего: нет



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

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

соответственно касяк гдето в конструкторе...
PM MAIL   Вверх
bsa
Дата 26.10.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



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

Зачем Person::Input использует только внешние переменные? Более того, методы класса должны оперировать только СОСТОЯНИЕМ ОБЪЕКТА ЭТОГО. Т.е. метод Input должен менять только внутренние переменные класса.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.