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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2014, 20:42   #11
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
На работе, знакомый программист мне сказал, что нужно как-то обнулять функцию после каждого использования, однако, я пока так и не понял каким именно образом..)
Ну дак подойди к этому программисту и спроси. Я тоже не умею обнулять функции, хочу научиться... Пусть ваш программист запишет видеоурок на ютубе по обнулению функций.

Stilet,
Цитата:
чтоб можно было разделитель строки задавать, было бы замечтательно.
Ну разделитель можно в getline задать. Точно не помню, но вроде бы в третьем параметре. У >> другие задачи наверное.

Последний раз редактировалось rrrFer; 28.08.2014 в 20:50.
rrrFer вне форума Ответить с цитированием
Старый 28.08.2014, 20:45   #12
GooderSteel
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 11
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Ну дак подойди к этому программисту и спроси. Я тоже не умею обнулять функции, хочу научиться... Пусть ваш программист запишет видеоурок на ютубе по обнулению функций.
хм..ну может я не совсем коррекно выразился)

есть какие предположения, что нужно сделать для работоспособности данного кода?

Последний раз редактировалось Stilet; 28.08.2014 в 21:56.
GooderSteel вне форума Ответить с цитированием
Старый 28.08.2014, 20:55   #13
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

GooderSteel
Если хочешь что-нибудь добавить к сообщению - используй кнопку "Edit" в сообщении, а не пиши новое. Тут сообщения не объединятся, модераторы ругаются.

Цитата:
есть какие предположения, что нужно сделать для работоспособности данного кода?
Вставь cin.get() перед getline().
get считает символ перевода строки, а getline считает следующую строку.

Все это не сработает если ты введешь 2 символа перевода строки подряд - если очень надо - вызывай cin.peek() и cin.get() в цикле до тех пор пока peek не вернет не пробельный символ.

Что за задачу вообще решаешь? - мне код не нравится, я наверное решал бы иначе.

Не проверял, но примерно так:

Код:
while (true) {
  if (false == isspace(cin.peek())
    break;
  cin.get();
}
rrrFer вне форума Ответить с цитированием
Старый 28.08.2014, 21:14   #14
GooderSteel
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 11
По умолчанию

Да, спасибо) вставил функцию cin.get(); и вроде программа перестала перескакивать) Задача имеет следующий вид, если сильно интересно: Создайте класс employee, который содержит имя(объект класса string) и номер (типа long) служащего. Включите в него метод getdata(), предназначенный для получения данных от пользователя и помещения их в объект, и метод putdata(), для вывода данных. Предполагаем, что имя может иметь внутренние пробелы.
Напишите функцию main(), использующую этот класс. Вам нужно будет создать массив типа employee, а затем предложить пользователю ввести данные до 100 служащих. Наконец, вам нужно будет вывести данные всех служащих.

Получилось следующее:
Код:
#include <iostream>
#include <string>		//для использования функций работы со строками
using namespace std;
////////////////////////////////////////////////////////////////////////////////

class employee
{
public:
	void getdata();
	void putdata()const;
private:
	string name;
	long number;
};

int main()
{
	setlocale(LC_CTYPE, "rus");
	
	const int MAX = 100;
	employee s[MAX];
	int j = 0;		//переменная используемая для подсчета количества введенных данных пользователем
	char answer;	//символьная переменная, содержащая ответ пользователя
	
	for (int i=0; i < MAX; i++)
	{
		s[i].getdata();
		cout << "Вы хотите продолжить?(y/n): ";
	Request:cin >> answer;
		j++;
		if ((answer != 'y') && (answer != 'n'))
		{
			cout << "Был введен неверный символ. Пожалуйста введите символ заново." << endl;
			goto Request;
		}
		else if (answer == 'n')
		{
			break;	//выход из внутреннего цикла
		}
		cin.get();
	}

	for (int i=0; i < j; i++)
	{
		s[i].putdata();
	}

	std::system("pause");
	return 0;
}

void employee::getdata()
{
	cout << "Введите имя сотрудника: ";
	getline(cin, name);
	cout << "Введите его номер: ";
	cin >> number;
}

void employee::putdata()const
{
	cout << "Имя сотрудника: " << name << endl;
	cout << "Номер сотрудника: " << number << endl;
}

Последний раз редактировалось GooderSteel; 28.08.2014 в 21:28.
GooderSteel вне форума Ответить с цитированием
Старый 28.08.2014, 21:36   #15
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Не знаю где ты взял это задание, но оно плохое.
Классы, как и любые другие штуки должны иметь как можно меньше побочных эффектов. Ввод данных с клавы - это побочный эффект (данные из буфера клавиатуры исчезают).

Тестировать код с побочными эффектами очень тяжело.

Классы должны как можно меньше работать с девайсами (типа клавиатуры). Классу служащего должно быть глубоко фиолетово откуда поступают данные- с файла, с клавы, из сети, или через микрофон или.... Он не должен работать с клавиатурой.

Метод getdata НЕ должен получать данные, а должен их возвращать. Когда я вызываю метод getdata я ожидаю что объект ОТДАСТ мне данные.

Ввод данных в твоем случае должен находиться в main().
Конструктор служащего должен принимать имя и номер (ну я так думаю, ты не должен иметь возможность создать безымянного служащего, иначе это чем-то грозит).
Ну если очень хочется - можешь добавить методы rename и changeId.
А еще методы getId и getName, которые возвращают имя и id соотвественно.

Ну это я типа новую задачу тебе придумал ))

------------
Простой пример. Прикинь, если у тебя где-то будет набор сотрудников и программа должна будет следить за тем, чтобы не появилось 2 сотрудника с одинаковым номером? - твой код нельзя будет номрально поправить, а требование весьма логичное. Почему твой код этого не может? - да птамушта сотрудник НЕ должен сам проверять свой номер. Если внезапно предъявляется требование к уникальности номера - то в проверкой номеров должен заниматься другой объект. Оно и в жизни так. Ты приходишь в ГИБДД и не сам придумываешь уникальный номер, а тебе его присваивает специально обученный сотрудник )) Короче не надо на сотрудника навешивать придумывание (ввод) номера.

Последний раз редактировалось rrrFer; 28.08.2014 в 21:40.
rrrFer вне форума Ответить с цитированием
Старый 28.08.2014, 22:23   #16
GooderSteel
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 11
По умолчанию

Ну это же задание для новичков) Взял я его из книги "Объектно-ориентированное программирование в С++" Р. Лафоре.. насколько мне известно, по этой книге программистов в университете обучают..) сейчас всего лишь прочитана 1/3 всей книжки я еще только что познакомился с классами.. а здесь не задал конструктор, так как просто не уследил) в этой главе рассказывалось про массивы, как строковые, так и обычные.. Я-то просто в свое время в универе выучился на инженера-радиотехника(собственно им и работаю), пишу немного другие программки для микроконтроллеров и ПЛИС. А все что касается более углубленного в компьютер я не шибко знаю, поэтому решил выполнить абсолютно все упражнения из книги сам и прочитать ее абсолютно полностью.. для меня тут в каждой главе много нового.. я у себя на работе подобное не применяю за ненадобностью) Да и работаю я там в основном с "параллельными" языками программирования..(С++ является последовательным). Поэтому, конечно, могу на данный момент писать всяческие глупости) Но вроде как в конце книги все будет рассказано более подробно, как можно и нужно применять классы..)

Может после того, как прочитаю книжку, смогу найти применение своим знаниям и на работе) Правда у нас там не сильно нужны настолько сложные языки..пока вроде как обычного С хватало.. Ну а для программирования на ПЛИС, наверное, самым лучшим языком является System Verilog..(собственно там на С++ уже совсем ничего толком написать нельзя, только если на микроконтроллерах).

Последний раз редактировалось GooderSteel; 28.08.2014 в 22:32.
GooderSteel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция счётесли работает некорректно Pavelasd Microsoft Office Excel 2 04.05.2014 02:05
Функция ВПР работает некорректно Витальян Microsoft Office Excel 4 06.12.2013 00:20
Не работает с первого раза getline AxenicX Помощь студентам 2 28.11.2009 23:43
Функция С++ getline() Golovastik Общие вопросы C/C++ 8 30.07.2009 00:20