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

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

Восстановить пароль Регистрация
 
JokerNk
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 3
18.04.2013, 14:18     Теряется запрос ввода строки, содержащийся в функции класса #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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2013, 14:18     Теряется запрос ввода строки, содержащийся в функции класса
Посмотрите здесь:

C++ Функция ввода для класса string
C++ Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса?
C++ Какими способами можно использовать функции класса B, как параметры функции Sub класса А?
C++ Ошибка ввода строки следующего обьекта класса (C++)
C++ Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса
Как обраиться к функции класса через другую функцию класса (друга)? C++
C++ Как полю класса А обратится к приватной функции класса А?
При передаче указателя в качестве аргумента функции теряется значение C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 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;
}
Yandex
Объявления
18.04.2013, 20:01     Теряется запрос ввода строки, содержащийся в функции класса
Ответ Создать тему
Опции темы

Текущее время: 15:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru