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

Показать сообщение отдельно

Аватара для 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