Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
JokerNk
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 3
#1

Теряется запрос ввода строки, содержащийся в функции класса - C++

18.04.2013, 14:18. Просмотров 271. Ответов 1
Метки нет (Все метки)

Здраствуйте! Имею следующую проблему : завожу класс "Личности", в нем описываю различные характеристики личностей ( ФИО, город, телефон и т.д. ), а также функции ввода, вывода и т.д. Когда в главной функции завожу переменную типа "Личности" и применяю к ней функцию ввода, всё работает корректно. Но если я завожу массив типа "Личности", в функции ввода игнорируется команда ввода (извините за тавтологию) характеристик типа char. Ниже приведен код программы, объясните пожалуйтса, в чем может быть проблема. Спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "stdafx.h"
#include <iostream>
using namespace std ;
 
class person
{
    int day, month, year, age, growth ;
    char FIO [50] , status [25], city [25], country [25], phone [20], email [25], sigh[ 10 ];
public :
    void Input ()
    {
                      cout << "F.I.O. : " ;
        cin.getline( FIO, 50 ) ;
        cout << endl << "Date of Birth : " ;
        cin >> day >> month >> year ;
        cout << endl << "Growth : " ;
        cin >> growth ;
        cout << endl << "Country : " ;
        cin.getline( country, 50 ) ;
    }
    void Output ()
    {
        cout << "F.I.O. : " ;
        for ( int i = 0 ; FIO[i] ; i++ )
            cout << FIO[i] ;
        cout << endl ; 
        if ( day < 10 && month < 10 )
            cout << endl << "Date of Birth : 0" << day << ".0" << month << "." << year << endl ;
        else 
        {
            if ( day < 10 )
                cout << endl << "Date of Birth : 0" << day << "." << month << "." << year  << endl ;
            if ( month < 10 ) cout << endl << "Date of Birth : " << day << ".0" << month << "." << year << endl ;
        }
        cout << endl << "Growth : " << growth << endl;
        cout << endl << "Country : " ;
        for ( int i = 0 ; country[i] ; i++ )
            cout << country[i] ;
        cout << endl ;
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    const int N = 20 ;
    int n ;
    cin >> n ;
    person p[N] ;
    for ( int i = 0 ; i < n ; i++ )
    {
        p[i].Input() ;
        cout << endl ;
    }
    system ("cls") ;
    for ( int i = 0 ; i < n ; i++ )
    {
        p[i].Output() ;
        cout << endl ;
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2013, 14:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Теряется запрос ввода строки, содержащийся в функции класса (C++):

Ошибка ввода строки следующего обьекта класса (C++) - C++
Добрый вечер всем! Проблема в том, что после ввода строки обьекта базового класса в следующим производном нету возможности для его...

Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса - C++
Здравствуйте! Можно ли использовать перегруженный оператор ввода/вывода в поток из базового класса для объекта производного класса, если...

Какими способами можно использовать функции класса B, как параметры функции Sub класса А? - C++
class A {... void Sub(...); ...} class B : ... { public: float f1(float); float f2(float); ...

При передаче указателя в качестве аргумента функции теряется значение - C++
Добрый день. Есть простенькая задачка сделать связанный список. При этом создается первый эелемнт списка с нулевым указателем на...

Как обраиться к функции класса через другую функцию класса (друга)? - C++
Пример кода: #include &lt;iostream&gt; using namespace std; class Sasha; class Petya { public: friend class Sasha; ...

Удаление экземпляра класса в функции самого класса (Ошибка при отладке) - C++
Допустим, у нас есть класс Buffer, который хранит в себе указатель на класс некоторой матрицы и количество этих указателей refcounter ...

1
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
18.04.2013, 20:01 #2
JokerNk, ваша проблема в том, что вы вводите размер массива личностей, и в потоке остается символ новой строки, он и записывается в строку, поэтому сразу просит ввести следующее поле, вот подправил

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
using namespace std ;
 
class person
{
    int day, month, year, age, growth ;
    char FIO [50] , status [25], city [25], country [25], phone [20], email [25], sigh[ 10 ];
public :
    void Input ()
    {
                      cout << "F.I.O. : " ;
        cin.getline( FIO, 50 ) ;
        cout << endl << "Date of Birth : " ;
        cin >> day >> month >> year ;
        cout << endl << "Growth : " ;
        cin >> growth ;
        cin.ignore();
        cout << endl << "Country : " ;
        cin.getline( country, 50 ) ;
    }
    void Output ()
    {
        cout << "F.I.O. : " ;
        for ( int i = 0 ; FIO[i] ; i++ )
            cout << FIO[i] ;
        cout << endl ; 
        if ( day < 10 && month < 10 )
            cout << endl << "Date of Birth : 0" << day << ".0" << month << "." << year << endl ;
        else 
        {
            if ( day < 10 )
                cout << endl << "Date of Birth : 0" << day << "." << month << "." << year  << endl ;
            if ( month < 10 ) cout << endl << "Date of Birth : " << day << ".0" << month << "." << year << endl ;
        }
        cout << endl << "Growth : " << growth << endl;
        cout << endl << "Country : " ;
        for ( int i = 0 ; country[i] ; i++ )
            cout << country[i] ;
        cout << endl ;
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    const int N = 20 ;
    int n ;
    cin >> n ;
    person p[N] ;
    cin.ignore();
    for ( int i = 0 ; i < n ; i++ )
    {
        p[i].Input() ;
        cout << endl ;
    }
    system ("cls") ;
    for ( int i = 0 ; i < n ; i++ )
    {
        p[i].Output() ;
        cout << endl ;
    }
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2013, 20:01
Привет! Вот еще темы с ответами:

Возможно ли создание объекта шаблонного класса в функции этого класса? - C++
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон контейнера (множество) с операциями...

Создание статической функции класса, которая принимает экземпляр этого же класса как объект - C++
Привет. Есть такой код class Model { public: Model(); Model(int verticesSize, int facesSize); ~Model(); static void...

Изменение статического закрытого элемента данных класса посредством статической элемент-функции класса - C++
Добрый день. Не могу разобраться, как изменить закрытую статическую переменную класса. Вот код. Ошибка &quot;unresolved external&quot;. ...

Как полю класса А обратится к приватной функции класса А? - C++
Есть лифт (класс &quot;Elevator &quot;), в котором находится кнопка (класс &quot;Button&quot;). При нажатии на кнопку (функция &quot;push&quot;) должен пойти сигнал в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru