Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 3
1

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

18.04.2013, 14:18. Показов 402. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2013, 14:18
Ответы с готовыми решениями:

HTML!? Есть поле ввода Type text, после ввода текста и нажатия entrer теряется фокус, как его оставить в этом же поле?
HTML!? Есть поле ввода Type text, после ввода текста и нажатия entrer теряется фокус, как его...

Запрос ввода строки с клавиатуры
Есть блок кода ассемблера (работает без ОС, из загрузочного сектора). ;16-битная адресация, пока...

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

Запрос - при соединении теряется поле
Запрос и задача до безобразия простые, соединить 2 ВТ с пересекающемся полем, но после соединения...

1
380 / 351 / 113
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2013, 20:01

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Организация ввода строки в отдельной функции
Уважаемые Форумчане! Столкнулся со следующей проблемой: Необходимо было закодить небольшую...

Теряется часть строки
Здравствуйте. Немогу понять в чем проблема.. В файле editor.php есть такой код, предлагающий выбор...

Вызов функции класса из строки
Привет, есть класс который хранит нужный класс и (string) имя функции class Test{ var $class; ...

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


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

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

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