Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] помогите решить задачу!

Ответить
Настройки темы
C/C++ - [решено] помогите решить задачу!

Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Изменения
Автор: virus8
Дата: 15-02-2012
народ помогите разобраться - программка типа телефонный справочник.
Каким образом мне обеспечить ввод адреса ( типа такого - ул. чайковского 10) - чтоб программка не перескакивала через один ввод.
А то что то ввод в массив структуры не даётся)))))

вот код: (в коде строку пометил которая не дает ввести)
Код: Выделить весь код
#include <iostream>
#include <cstring>
using namespace std;

void main()
{
	setlocale(LC_ALL, "Russian");
	struct {
		char firstname[15],
			lastname[20];
		char address[40];
		int phone;
	} kniga[50];

	cout << "\t\tТелефонный справочник\n";

	int k_abon;
	cout << "Введите количество абонентов: ";
	cin >> k_abon;
	cout << endl;

	for(int i = 0; i < k_abon; i++)
	{
		cout << "Введите имя:\t";
		cin >> kniga[i].firstname;
		cout << "Введите фамилию:";
		cin >> kniga[i].lastname;
		cout << "Введите адрес:";
		cin.getline(kniga[i].address, 40);  // ПОМОЧЬ НАДО С ЭТИМ ОТРЕЗКОМ КОДА пробовал через cin тоже самое
		cout << "Введите телефон:";
		cin >> kniga[i].phone;
		cout << endl;
	}
}

Отправлено: 17:31, 12-02-2012

 

Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Подправил пустую тему

Отправлено: 14:00, 14-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


можно так

Код: Выделить весь код
for(int i = 0; i < k_abon; i++)
{
    cout << "Введите имя:\t";
    cin >> kniga[i].firstname;
    cout << "Введите фамилию: ";
    cin >> kniga[i].lastname;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cout << "Введите адрес: ";
    cin.getline(kniga[i].address, 40);
    cout << "Введите телефон:";
    cin >> kniga[i].phone;
    cout << endl;
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:20, 14-02-2012 | #3


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


О, спасибо!
А можно поподробнее где про это можно почитать, а то я в описание про cin не нашел!
Цитата:
cin.ignore(numeric_limits<streamsize>::max(), '\n');
о

Отправлено: 21:03, 14-02-2012 | #4


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата virus8:
где про это можно почитать »
тоже хочу найти какую-нибудь литературу, где подробно описано

а пока вот например http://www.cplusplus.com/reference/i...stream/ignore/
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:19, 14-02-2012 | #5


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Спасибо большое!
Вот только не посчитай меня занудливым можешь еще подсказать одну вещь - как функции передать массив структур???

void search(struct kniga[50], int) - потом не считает её структурой.
Пробовал void search(struct kniga *N_kniga[]) - тоже не катит.
Если че сильно не смейтесь)))

Отправлено: 21:57, 14-02-2012 | #6


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


примерно так

Код: Выделить весь код
#include <iostream>
#include <cstring>
using namespace std;

typedef struct {
char firstname[15], lastname[20];
char address[40];
int phone;
} kniga[50];

void search(kniga *ptr, int i)
{
	*ptr[i]->firstname;
	*ptr[i]->lastname;
	*ptr[i]->address;
	 ptr[i]->phone;
}

void main()
{
setlocale(LC_ALL, "Russian");

cout << "\t\tТелефонный справочник\n";
kniga kn;

int k_abon;
cout << "Введите количество абонентов: ";
cin >> k_abon;
cout << endl;

for(int i = 0; i < k_abon; i++)
{
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Введите имя:\t";
cin >> kn[i].firstname;
cout << "Введите фамилию: ";
cin >> kn[i].lastname;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Введите адрес: ";
cin.getline(kn[i].address, 40); 
cout << "Введите телефон:";
cin >> kn[i].phone;
cout << endl;
}
search(&kn, 0);
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:55, 15-02-2012 | #7


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Вот навоял такое)))
Только, что то не пойму - абонентов не выводит, поиск происходит только по первому абоненту.

Только прошу не решайте, а если есть возможность просто на ошибки укажите(просто хочу сам разобраться, а чет туплю не по детски).
Сразу грешил на кодировку, а потом понял, что не в ней дело. Походу как то не корректно сохраняет инфу в массив
читать дальше »
Код: Выделить весь код
#include <iostream>
#include <cstring>

using namespace std;

typedef struct {
		char firstname[15],
			lastname[20];
		char address[40];
		int phone;
	}kniga[50];

void menu();
void search(kniga *ptr);
void vivod(kniga *ptr, int i);

int main()
{
	
	kniga kn;

	cout << "\t\tTelefonniy spravochnik\n";
	int k_abon;
	cout << "Vvedite kol-vo abonentov: ";
	cin >> k_abon;
	cout << endl;

	for(int i = 0; i < k_abon; i++)
{
	cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cout << "Vvedite imya:\t";
    cin >> kn[i].firstname;
    cout << "Vvedite familiyu: ";
    cin >> kn[i].lastname;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cout << "Vvedite address: ";
    cin.getline(kn[i].address, 40);
    cout << "Vvedite telefon:";
    cin >> kn[i].phone;
    cout << endl;
}

	for(int i = 0; i < k_abon; i++) // вывод введенного
	{
		cout << kn[i].firstname << " " << kn[i].lastname << " " << kn[i].address << " " << kn[i].phone << "\n";
	}

	int Menu;
	do
	{
		menu();
	    cin >> Menu;
		switch(Menu)
		{
        
		case 1: // поиск по фамилии
			search(&kn);
			break;

		case 2: // вывод всех абонентов по первой букве алфавита
			char Flastname;
			cout << "Vvedite pervuyu bukvu";
			cin >> Flastname;
			for(int i = 0; i < k_abon; i++)
			{
				if(kn[i].lastname[0] == Flastname)
					cout << kn[i].firstname << " "
					<< kn[i].lastname << " "
					<< kn[i].phone << " "
					<< kn[i].address << "\n";
			}
			break;

		case 3:  // вывод всех абонентов
			vivod(&kn, k_abon);
			break;
		}
	} while(Menu > 1 || Menu < 3);
	return 0;
}

void menu()
{
	cout << "\t\tMenu\n"
	     << "\n1) Poisk telefona po familii"
		 << "\n2) Vivod abonentov po pervoy bukve familii"
		 << "\n3) Vivod vsex abonentov\n";
}

void vivod(kniga *ptr, int k_abon)
{
	for(int i = 0; i < k_abon; i++)
			{
				cout << ptr[i]->firstname << " "
					<< ptr[i]->lastname << " "
					<< ptr[i]->address << " "
					<< ptr[i]->phone << "\n";
			}
}

void search(kniga *ptr)
{
	        char Slastname[20];
			cout << "Vvedite familiyu";
	        cin >> Slastname;
	        for(int i = 0; i < 50; i++)
	          {
				  if(!strcmp(ptr[i]->lastname, Slastname))
				  {
						  cout << "Telefon: " << ptr[i]->phone << endl;
				          break;
				  }
	          }
}


вот такой вот вывод получается сразу все хорошо все выводится, а потом какие то маты консоль выдает(русский убрал полностью)


Посидел чу-чуть поразмыслил: переделал все тоже самое только без функций, работает - теперь если у кого то время будет можете глянуть верхний код и сравнить его с переделанным и указать на ошибки.
Вот код:
читать дальше »
Код: Выделить весь код
#include <iostream>
#include <cstring>

using namespace std;

typedef struct {
		char firstname[15],
			lastname[20];
		char address[40];
		int phone;
	}kniga[50];

void menu();

int main()
{
	kniga kn;

	cout << "\t\tTelefonniy spravochnik\n";
	int k_abon;
	cout << "Vvedite kol-vo abonentov: ";
	cin >> k_abon;
	cout << endl;

	for(int i = 0; i < k_abon; i++)
{
	cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cout << "Vvedite imya:\t";
    cin >> kn[i].firstname;
    cout << "Vvedite familiyu: ";
    cin >> kn[i].lastname;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cout << "Vvedite address: ";
    cin.getline(kn[i].address, 40);
    cout << "Vvedite telefon:";
    cin >> kn[i].phone;
    cout << endl;
}

	int Menu;
	do
	{
		menu();
	    cin >> Menu;
		switch(Menu)
		{
        
		case 1: // поиск по фамилии
			char Slastname[20];
			cout << "Vvedite familiyu\t";
	        cin >> Slastname;
	        for(int i = 0; i < k_abon; i++)
	          {
				  if(!strcmp(kn[i].lastname, Slastname))
				  {
						  cout << "Telefon: " << kn[i].phone << endl;
				          break;
				  }
	          }
			break;

		case 2: // вывод всех абонентов по первой букве алфавита
			char Flastname;
			cout << "Vvedite pervuyu bukvu\t";
			cin >> Flastname;
			for(int i = 0; i < k_abon; i++)
			{
				if(kn[i].lastname[0] == Flastname)
					cout << kn[i].firstname << " "
					<< kn[i].lastname << " "
					<< kn[i].phone << " "
					<< kn[i].address << "\n";
			}
			break;

		case 3:  // вывод всех абонентов
			for(int i = 0; i < k_abon; i++) // вывод введенного
	{
		cout << kn[i].firstname << " " << kn[i].lastname << " " << kn[i].address << " " << kn[i].phone << "\n";
	}
			break;
		}
	} while(Menu > 1 || Menu < 3);
	return 0;
}

void menu()
{
	cout << "\t\tMenu\n"
	     << "\n1) Poisk telefona po familii"
		 << "\n2) Vivod abonentov po pervoy bukve familii"
		 << "\n3) Vivod vsex abonentov\n";
}




И вообще спасибо за оказанную помощь

Последний раз редактировалось Drongo, 15-02-2012 в 15:37. Причина: Пожалуйста используйте тег код [code]


Отправлено: 11:43, 15-02-2012 | #8


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


проблема вот в этой конструкции
Код: Выделить весь код
#include <iostream>
#include <cstring>

using namespace std;

typedef struct {
char firstname[15],
lastname[20];
char address[40];
int phone;
}kniga[50];

void menu();
void search(kniga *ptr);
void vivod(kniga *ptr, int i);
она сильно усложняет код
если заменить на

Код: Выделить весь код
typedef struct {
	char firstname[15],
		lastname[20];
	char address[40];
	int phone;
}KNIGA;

KNIGA kniga[50];

void menu();
void search(KNIGA *ptr);
void vivod(KNIGA *ptr, int i);
то будет намного проще

Код: Выделить весь код
int main()
{
	cout << "\t\tTelefonniy spravochnik\n";
	int k_abon;
	cout << "Vvedite kol-vo abonentov: ";
	cin >> k_abon;
	cout << endl;

	for(int i = 0; i < k_abon; i++)
	{
		cin.ignore(numeric_limits<streamsize>::max(), '\n');
		cout << "Vvedite imya:\t";
		cin >> kniga[i].firstname;
		cout << "Vvedite familiyu: ";
		cin >> kniga[i].lastname;
		cin.ignore(numeric_limits<streamsize>::max(), '\n');
...................................................................................................
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:45, 15-02-2012 | #9


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Все разобрался - как раз тему читал про структуры. Сделал для себя великое открытие, что kniga и так является указателем на структуру KNIGA))))))).
ferget спасибо большое за помощь!!!
Если кому нужно вот код:
читать дальше »
Код: Выделить весь код
#include <iostream>
#include <cstring>

using namespace std;

typedef struct {
	char firstname[15],
		lastname[20];
	char address[40];
	int phone;
}KNIGA;

KNIGA kniga[50];

inline void menu();
inline void search(KNIGA *ptr, int k_abon);
inline void vivod(KNIGA *ptr, int i);
inline void searchB(KNIGA *ptr, int k_abon);

int main()
{



cout << "\t\tTelefonniy spravochnik\n";
int k_abon;
cout << "Vvedite kol-vo abonentov: ";
cin >> k_abon;
cout << endl;

for(int i = 0; i < k_abon; i++)
{
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Vvedite imya:\t";
cin >> kniga[i].firstname;
cout << "Vvedite familiyu: ";
cin >> kniga[i].lastname;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Vvedite address: ";
cin.getline(kniga[i].address, 40);
cout << "Vvedite telefon:";
cin >> kniga[i].phone;
cout << endl;
}

for(int i = 0; i < k_abon; i++) // вывод введенного
{
cout << kniga[i].firstname << " " << kniga[i].lastname << " " << kniga[i].address << " " << kniga[i].phone << "\n";
}

int Menu;
do
{
menu();
cin >> Menu;

switch(Menu)
{

case 1: // поиск по фамилии
search(kniga, k_abon);
break;

case 2: // вывод всех абонентов по первой букве алфавита
	searchB(kniga, k_abon);
break;

case 3: // вывод всех абонентов
vivod(kniga, k_abon);
break;
}


} while(Menu > 1 || Menu < 3);
return 0;
}

inline void menu()
{
cout << "\t\tMenu\n"
<< "\n1) Poisk telefona po familii"
<< "\n2) Vivod abonentov po pervoy bukve familii"
<< "\n3) Vivod vsex abonentov\n";
}

inline void vivod(KNIGA *ptr, int k_abon)
{
for(int i = 0; i < k_abon; i++)
{
	cout << ptr[i].firstname << " "
<< ptr[i].lastname << " "
<< ptr[i].address << " "
<< ptr[i].phone << "\n";
}
}

inline void search(KNIGA *ptr, int k_abon)
{
char Slastname[20];
cout << "Vvedite familiyu\t";
cin >> Slastname;
for(int i = 0; i < 50; i++)
{
if(!strcmp(ptr[i].lastname, Slastname))
{
cout << "Telefon: " << ptr[i].phone << endl;
break;
}
}
} 
inline void searchB(KNIGA *ptr, int k_abon) // поиск всех абонентов по букве
{
	char Flastname;
cout << "Vvedite pervuyu bukvu\t";
cin >> Flastname;
for(int i = 0; i < k_abon; i++)
{
if(kniga[i].lastname[0] == Flastname)
cout << kniga[i].firstname << " "
<< kniga[i].lastname << " "
<< kniga[i].phone << " "
<< kniga[i].address << "\n";
}

}

Последний раз редактировалось virus8, 15-02-2012 в 20:41.


Отправлено: 16:15, 15-02-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] помогите решить задачу!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ Shok147 Тест-форум 0 14-11-2011 14:02
CMD/BAT - Помогите решить задачу dichlormetan Тест-форум 1 08-11-2011 21:23
C/C++ - Помогите решить задачу zdughi Программирование и базы данных 1 01-05-2009 06:03
помогите решить задачу snikers Программирование и базы данных 2 27-08-2004 01:57
помогите решить задачу Guest Программирование и базы данных 2 21-05-2004 11:23




 
Переход