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

Потоки. Ввод данных. - C++

Восстановить пароль Регистрация
 
Aloir
 Аватар для Aloir
216 / 216 / 13
Регистрация: 17.12.2010
Сообщений: 688
14.08.2011, 15:06     Потоки. Ввод данных. #1
Если согласится на ввод второго человека, пропускается ввод его имени... вроде ввод все правильно, не знаю в чем беда
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
#include"stdafx.h"
#include <iostream>
using namespace std; 
 
class NameDataSet{
public:
    char FirthName[128];
    char LastName[128];
    int creditCard;
};
 
void getData(NameDataSet& cl)
{
    cout<<"Vvedite Familiu: ";
    cin.getline(cl.FirthName,128);
    cout<<"Vvedite Imya: ";
    cin.getline(cl.LastName,128);
    cout<<"Vvedite nomer kreditnoi karti: ";
    cin>>cl.creditCard;
 
}
 
void outData(NameDataSet& cl)
{
    cout <<endl<<cl.FirthName<<" "<<cl.LastName<<" "<<cl.creditCard;
}
int main()  
{
    const int max=20;
    NameDataSet nds[max]; //обьявление класса
    int count=0;
    char ch;
    do
    {
        count++;
        getData(nds[count-1]);
        cout<<endl<<"Vvesti es4e odnogo 4eloveka? Y or N?: ";
        cin>>ch;
    }while(tolower(ch)!='n' && count<=max);
    
    system("cls");
    for(int i=0;i<count;i++)
        outData(nds[i]);
 
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
14.08.2011, 15:10     Потоки. Ввод данных. #2
Ваш код не смотрел, но попробуйте напсать cin.get(); перед вводом этого имени: "пропускается ввод его имени...", скорее всего после предидущего ввода в потоке остался символ '\n'.
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
14.08.2011, 15:18     Потоки. Ввод данных. #3

Не по теме:

Да у меня такаеже проблема была.


В строке которую ты вводишь есть пробелы? если нет то можешь через cun>>...
Aloir
 Аватар для Aloir
216 / 216 / 13
Регистрация: 17.12.2010
Сообщений: 688
14.08.2011, 15:26  [ТС]     Потоки. Ввод данных. #4
Извиняюсь, после ввода 1 человека и последущих людей, пропускается фамиля, тоесть 1 член класса.
Нет, не помогло. Последний ввод был ввод цифр в целочисленное значение...
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
14.08.2011, 15:28     Потоки. Ввод данных. #5
ну или если хочешь с getline вот тебе твоя функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void getData(NameDataSet& cl)
{
        cin.sync();
        cout<<"Vvedite Familiu: ";
        cin.getline(cl.FirthName,128);
        cin.sync();
        cout<<"Vvedite Imya: ";
        cin.getline(cl.LastName,128);
        
        cout<<"Vvedite nomer kreditnoi karti: ";
        cin>>cl.creditCard;
 
}
Aloir
 Аватар для Aloir
216 / 216 / 13
Регистрация: 17.12.2010
Сообщений: 688
14.08.2011, 15:28  [ТС]     Потоки. Ввод данных. #6
Цитата Сообщение от Ree.exe Посмотреть сообщение

Не по теме:

Да у меня такаеже проблема была.


В строке которую ты вводишь есть пробелы? если нет то можешь через cun>>...
Нет пробелов, но если бы были? не впервой тоже сталкиваюсь, и хочу все-таки разобратся в чем тут дело...
Ree.exe
14.08.2011, 15:30
  #7

Не по теме:

Пост выше, все как ты хочешь через cin.getline()

m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
14.08.2011, 17:15     Потоки. Ввод данных. #8
cin.clear();

Добавлено через 2 минуты
как я понимаю дело в "ентер"е после ввода строки с именем или фамилией в потоке сидит код кнопки етнер, и при следующем вызове cin забирает его, вместо возможности ввести что то новое.
хотя могу и ошибаться в с++ не оч )
попробуй очищать поток cin
soon
14.08.2011, 19:00
  #9

Не по теме:

Зачем класс только с открытыми переменными? Классы (если верить книгам) созданы для того, чтобы ограничивать доступ к некоторым членам этого класса. Доступ к ним должен осуществляться через открытые функции этого же класса. Логичней было бы использовать структуру в данном случае, imho

Aloir
 Аватар для Aloir
216 / 216 / 13
Регистрация: 17.12.2010
Сообщений: 688
14.08.2011, 21:46  [ТС]     Потоки. Ввод данных. #10
Цитата Сообщение от soon Посмотреть сообщение

Не по теме:

Зачем класс только с открытыми переменными? Классы (если верить книгам) созданы для того, чтобы ограничивать доступ к некоторым членам этого класса. Доступ к ним должен осуществляться через открытые функции этого же класса. Логичней было бы использовать структуру в данном случае, imho

В данно случает, это был просто пример с книги, а так да, полсностью согласен, структура гораздо удобнее была бы

Добавлено через 6 минут
Цитата Сообщение от m1Rr0r Посмотреть сообщение
cin.clear();

Добавлено через 2 минуты
как я понимаю дело в "ентер"е после ввода строки с именем или фамилией в потоке сидит код кнопки етнер, и при следующем вызове cin забирает его, вместо возможности ввести что то новое.
хотя могу и ошибаться в с++ не оч )
попробуй очищать поток cin
А вот cin.clear() - не помогает, помогло cin.sync()
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 22:08     Потоки. Ввод данных. #11
Цитата Сообщение от Aloir Посмотреть сообщение
полсностью согласен, структура гораздо удобнее была бы
Ну почему же? А если getData и outData сделать функциями-членами? У вас и так что-то вроде thiscall выходит И на счёт выигрыша в удобности - сомневаюсь... Что так, что так.
soon
14.08.2011, 22:23
  #12

Не по теме:

Я не говорил, что будет удобнее. Просто структуры, как правило, делаются открытыми, и, дабы не нарушать это правило, предложил использовать структуру, если необхдимо сохранить доступность переменных. Если же нет, то кравивее будет сделать все одним классом, со скрытыми переменными и открытыми функциями.
Оставим это на усмотрение ТС

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2011, 00:47     Потоки. Ввод данных.
Еще ссылки по теме:

Как правильно заменить ввод данных простой на ввод с клавиатуры? C++
C++ Потоковый ввод и ввод данных. Работа с числами
C++ Ввод-вывод, потоки

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

Или воспользуйтесь поиском по форуму:
silentnuke
15.08.2011, 00:47     Потоки. Ввод данных.
  #13

Не по теме:

Цитата Сообщение от soon Посмотреть сообщение

Не по теме:

Зачем класс только с открытыми переменными? Классы (если верить книгам) созданы для того, чтобы ограничивать доступ к некоторым членам этого класса. Доступ к ним должен осуществляться через открытые функции этого же класса. Логичней было бы использовать структуру в данном случае, imho

а в чем уж такая глобальная разница класс или структура, если в с++ они отличаются всего-лишь доступом по-умолчанию?)
да и классы это в стиле с++, ведь структуры, оставлены для совместимости с С=)

Yandex
Объявления
15.08.2011, 00:47     Потоки. Ввод данных.
Ответ Создать тему
Опции темы

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