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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2012, 17:40   #1
Alex_Dep
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
По умолчанию структура(Visual C++ 2008)

Код:
#include <iostream>
#include <fstream>
#include <locale>
using namespace std;
struct w{
	char lname[20];
	char city[20];
	char street[20];
	int year,house,flat;
};


w * EnterData(int &n)
{
	ifstream in ("in.txt");//открываем файл in.txt для чтения
	in>>n;// считываем n из in.txt
	w *data= new w[n];
	for (int i=0; i<n ; i++) 
		in>>data[i].lname>>data[i].year>>data[i].city>>data[i].street>>data[i].house>>data[i].flat;
	return data;
}



//сортировка по городу
void ShowlName(w *data, int  n)
{
	setlocale(LC_ALL, "Russian");
	setlocale(LC_ALL, "rus");
	cout<<"Фамилия начинается на Б:\n"<<endl;
	bool fl=true;
	for (int i=0; i<n-1; i++)
		if (strcmp(data[i].lname,"Б")==0)
		{
			cout<<data[i].lname<<"   "<<data[i].street
			<<"   "<<data[i].house<<"   "<<data[i].flat
			<<"   "<<"   "<<data[i].city<<endl;
			fl=false;
		}
	if (fl) cout<<"Нет"<<endl;
	cout<<"--------------------------------------------"<<endl;
}
//массив данных
void ShowData (w *data, int  n)
{	
	setlocale(LC_ALL, "Russian");
	setlocale(LC_ALL, "rus");

	puts("Таблица:\n");
	for (int i=0; i<n ; i++)
			cout<<data[i].lname<<"   "<<data[i].year<<"   "
			<<data[i].city<<"   "<<data[i].street
			<<"   "<<data[i].house<<"   "<<data[i].flat
			<<"   "<<endl;
	cout<<"--------------------------------------------"<<endl;
}

//сортировка пузырьком (строк)
void MySort(w *data, int n)
{
	bool fl=true;
	while (fl)
	{
		fl=false;
		for (int i=0; i<n-1; i++)
			if (strcmp(data[i].lname,data[i+1].lname)>0)
			{
				swap<w>(data[i],data[i+1]);
				fl=true;
			}
	}
}
//функции
int main ()
{
	int n;
	w *data= EnterData(n);
	ShowData(data,n);
	MySort (data,n);
	ShowData (data,n);
	ShowlName(data,n);
    getchar();
}
программа работает но не полностью, не выводит фамилии которые начинаются на "Б". подскажите, что у меня не так...

Последний раз редактировалось ACE Valery; 28.02.2012 в 18:14.
Alex_Dep вне форума Ответить с цитированием
Старый 28.02.2012, 18:18   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

а вы про функцию strcmp читали вообще?
Функция strcmp() сравнивает в лексикографическом порядке две строки и возвращает целое значение, зависящее следующим образом от результата сравнения. Меньше нуля - str1 меньше str2, Нуль - str1 равен str2, Больше нуля - str1 больше str2.
У вас проверка стоит на ноль, следовательно, чтоб она сработала, нужно, чтоб фамилия была "Б", а не начиналась на "Б"
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MS SQL Server 2008 и Visual Studio 2008 C# (Как работать с БД?) cherw9!40k Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 14.01.2010 20:51
Проблема с windows visual styles в Visual studio 2008 express. [awa Visual C++ 2 09.01.2010 06:05
Visual Studio Standard 2008 против Visual Studio Express 2008. Стоит ли покупать? Casper-SC Софт 4 31.12.2009 11:46
VISUAL STUDIO 2008 defaul language - как переключить в VISUAL STUDIO 2008 язык программирования, использ Эйнж Общие вопросы C/C++ 0 27.12.2009 20:39
Как перевести проект из Visual C++ 2003 в Visual C++ 2008? iukash Visual C++ 8 17.04.2009 22:36