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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2009, 11:10   #11
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от Николай Сергеевич Посмотреть сообщение
Что такое прайват?
И все равно не запрашивает ФИО...хм...в чом дело может быть, ума не приложу...
вот коды:
Код:
//файл 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() то запрашивается ввод, а если там где у меня записано (в функции класса) не выдает ввод, почему, объясните пожалуйста...
Не дискриптор, а деструктор!
Еще пробуй написать после подключения библиотек using namespace std;
Иначе должен писать std::cin и std::cout
И код гениально бредовый

person::nom_chel = no;
strcpy(person::fio, fi);
person:ol = po;
person::vozrast = vo;
Зачем тут разрешение области видимости "::", метод итак видит все переменные класса....Сейчас дам код простого и понятного класса
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 21.12.2009, 11:15   #12
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

файл head.h
Код:
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <string>
using namespace std;

class part //Класс деталей
{
private: //скрытые данные - имя, цена и масса детали
	int mass;
	float cost;
	string name;
public: //Общедоступные данные
	part() //Конструктор без аргументов
	{ mass=0;cost=0;name="Detal' ne zadana";}
	part(string nm,int ms, float ct): name(nm),mass(ms), cost(ct)//Конструктор с аргументами
	{}
	~part()
	{}
	void set_part() //Метод без аргументов - задает параметры детали
	{
		cout << "Vvedite nazvanie, massu i cenu\n";
		cin >> name;
		cin >> mass >> cost;
	}
	void set_part(string nm,int ms, float ct) //метод с аргументами
	{ name=nm; mass=ms; cost=ct;}
	void show_part() //Метод выводит данные о детали
	{
		cout << "Detal' imeet sleduyuschie parametri \n";
		cout <<"Nazvanie " << name << endl;
		cout <<"Massa    " << mass <<"kg" <<endl;
		cout <<"Cena     " << setiosflags(ios::fixed) <<setiosflags(ios::showpoint)
		<<setprecision(2)<< cost <<"$" <<endl<<endl;
	}
};
и cpp файл
Код:
#include "head.h"

int main()
{

	part p1; //Объявление объекта класса без задания значений полей
	part p2("Vtulka",15,3.25 ); //Объявление с помощью конструктора
	p1.set_part(); //Объявление с помощью метода
	p1.show_part(); //Вывод данных объекта
	p2.show_part(); //Вывод данных объекта
	getch();
	
	return 0;
}
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 21.12.2009, 13:45   #13
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
Восклицание

Я подправил, почистил, исправил замечания RoS'a но вопрос все еще актуален. cin.getline(fio,70,'\n'); - в main() она работает, а если ее использовать в какой-либо функции, она не работает, даже не запрашивает ввод данных...помогите пожалуйста, мож кто-нить сталкивался с такой проблемой

УРАААА!!! Нашел на форуме ответ, нужно cin.getline(fio,70,'\n'); написать два раза и тогда все получается...но...странно как то...) почему, так и не понял...

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

Удивительно, я думаю у тебя что-то там было в потоке, попробуй
cin.ignore(20,'\n');
Ну вместо 20 что-то подставь там, может бпобольше число, или, если не сработает, то
cin.clear();

Это все заместо первого getline();
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 22.12.2009, 08:48   #15
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
По умолчанию

Да, если вместо первого getline() поставить как ты написал, то тоже все получается...нашел ссылку на форуме...
http://cppstudy.wordpress.com/2009/0...in-get-and-co/
Как раз все о моей проблеме...
Ну ща вроде разобрался, спасибо большое за помощ, особенно RoS.

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


Купить рекламу на форуме - 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