Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2009, 20:09   #1
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
По умолчанию пробел и NULL

Всем здравствуйте, помогите пожалуйста, как сделать чтобы с клавиатуры считывалось несколько слов, а не первое до пробела. Если массиву численному сразу присваивать несколько слов, программа автоматически подставляет в конце NULL и нормально выводит на экран, а если вводить значение через cin то она только до пробела считывает символы, как решается эта проблема?
PS Я только начинаю изучать Visual C++
Николай Сергеевич вне форума Ответить с цитированием
Старый 20.12.2009, 21:05   #2
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Все гениально просто

cin.getline(char* buf,int maxLenght, char c);
Первый параметр - куда считывать, второй - максимальная длина, но до встречи символа c - по умолчанию на месте с стоит '\n',т оесть до интера
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 20.12.2009, 22:02   #3
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
По умолчанию

Спасибо за помощ, завтра попробую...
Николай Сергеевич вне форума Ответить с цитированием
Старый 20.12.2009, 22:29   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Если читать в string, то
istream& getline(istream& is, string& str);
например
getline(cin, s);
Somebody вне форума Ответить с цитированием
Старый 21.12.2009, 08:38   #5
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
По умолчанию

Блин...вроде контрольная простая, а я с ней уже неделю сижу...правдо по паре часов в день...)
Код:
cout << "Введите ФИО: ";
cin.getline(person::fio,70,'\n');//туть...???
Компилятор запускается без ошибок, вот только не дает вводить ФИО, просто пропускает, почему так может быть?
Николай Сергеевич вне форума Ответить с цитированием
Старый 21.12.2009, 09:10   #6
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от Николай Сергеевич Посмотреть сообщение
Блин...вроде контрольная простая, а я с ней уже неделю сижу...правдо по паре часов в день...)
Код:
cout << "Введите ФИО: ";
cin.getline(person::fio,70,'\n');//туть...???
Компилятор запускается без ошибок, вот только не дает вводить ФИО, просто пропускает, почему так может быть?
дай описание класса person, может у тебя ФИО private?
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 21.12.2009, 09:16   #7
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
По умолчанию

Код:
class person
{
private: 
	int nom_chel,pol,vozrast;
	char fio[70];
	
public:
	person(int no = 1, char *fi = "Nik", int po = 0, int vo = 26);
	void Print();
	~person();
	void input();
};
Точно, приват, ща покумекаю, так если приват, это значит что можно эту переменную редактировать только с помощью функций класса, но у меня то даже на запрашивает ввод...ща гляну...

Последний раз редактировалось Николай Сергеевич; 21.12.2009 в 09:30.
Николай Сергеевич вне форума Ответить с цитированием
Старый 21.12.2009, 09:23   #8
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
По умолчанию

Вот функция класса
Код:
void person::input()
{
char i[70];
 
 cout << "Введите ФИО: ";
 cin.getline(i,70,'\n');

 strcpy(person::fio,i);
}
Вот так попробовал нагородить, но вроде зря, толку нету. Этот код у меня выполняется в методе класса, значит у него должен быть доступ к переменной. Или я чот не так разобрался...(

PS (для админа) Прошу прощения за создание нового, а не редактирование предыдущего сообщения

Последний раз редактировалось Николай Сергеевич; 21.12.2009 в 09:26.
Николай Сергеевич вне форума Ответить с цитированием
Старый 21.12.2009, 10:02   #9
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от Николай Сергеевич Посмотреть сообщение
Вот функция класса
Код:
void person::input()
{
char i[70];
 
 cout << "Введите ФИО: ";
 cin.getline(i,70,'\n');

 strcpy(person::fio,i);
}
Вот так попробовал нагородить, но вроде зря, толку нету. Этот код у меня выполняется в методе класса, значит у него должен быть доступ к переменной. Или я чот не так разобрался...(

PS (для админа) Прошу прощения за создание нового, а не редактирование предыдущего сообщения
ЧТо ж ты делаешь, товарищ
Код:
void person::input()
{
 cout << "Введите ФИО: ";
 cin.getline(fio,70,'\n');
}
Методы имеют доступ к прайвату
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 21.12.2009, 10:39   #10
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
По умолчанию

Цитата:
Методы имеют доступ к прайвату
Что такое прайват?
И все равно не запрашивает ФИО...хм...в чом дело может быть, ума не приложу...
вот коды:
Код:
//файл main.cpp
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include "main.h"
person::person(int no, char *fi, int po, int vo)
{
	person::nom_chel = no;
	strcpy(person::fio, fi);
	person::pol = po;
	person::vozrast = vo;
}


person::~person()
{
	cout << "Дискриптор" << endl;
}

void person::Print()
{
	cout <<"Номер: "<< nom_chel << endl;
	cout << "ФИО: " << fio << endl;
	 if (pol)cout << "Пол: " << "Ж" << endl; 
	 else cout << "Пол: " << "М" << endl;
	cout << "Возраст: " << vozrast << "\n" << endl;
}

void person::input()
{
	cout << "Довабление клиента: " << endl;
	int n,v,p;
	
	do {
     cout << "Введите номер: ";
     cin >> n;   
	 if ((n <=1) || (n >= 30000)) cout << "от 1 до 30000" << endl;	}
	 while ((n <=1) || (n >= 30000));
	
	do {
 	 cout << "Введите пол (0 - мужской 1 - женский): ";
     cin >> p; 	}
	 while (!((p == 0) || (p == 1)));

	 do {
	 cout << "Введите возраст: ";
     cin >> v;
	 if ((v <=15) || (v >= 150)) cout << "от 15 до 150" << endl;	}
	 while ((v <=15) || (v >= 150));
	cout << "Введите ФИО: ";
    cin.getline(fio,70,'\n'); //вот тут то он и не спрашивает, а просто пролетает
	vozrast = v;
	pol = p;
	nom_chel = n;
}

void main()
{
   system("chcp 1251");
   
   person pers(1,"Никола Ник",0,20);
   pers.Print();
   person *per;
   per = new person;
   per->input();
   per->Print();
   delete per;
}

// файл main.h
#include <iostream.h>
#include <string.h>
class person
{
private:
	int nom_chel,pol,vozrast; 
	char fio[70];
	
public:
	person(int no = 1, char *fi = "Nik", int po = 0, int vo = 26);
	void Print(); 
	~person();
	void input();
};
Никак не пойму почему не спрашивает ФИО...(
Если cin.getline(fio,70,'\n') писать в основной программе main() то запрашивается ввод, а если там где у меня записано (в функции класса) не выдает ввод, почему, объясните пожалуйста...

Последний раз редактировалось Николай Сергеевич; 21.12.2009 в 10:53.
Николай Сергеевич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нет декларации ‘NULL’ Роман Радер Общие вопросы C/C++ 4 22.07.2009 16:40
operator= для NULL Selebro Общие вопросы C/C++ 2 14.12.2008 16:29
delete where fields=null??? Geddar SQL, базы данных 1 02.06.2008 16:57
Delphi 2007 и NULL nemaster21 Общие вопросы Delphi 14 23.04.2008 16:59
вопрос time(NULL) Ceprey Общие вопросы C/C++ 5 07.03.2008 11:30