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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2010, 02:38   #1
DragoonSki
 
Регистрация: 16.05.2010
Сообщений: 6
По умолчанию Работа со структурами (C++)

Доброго всем времени суток.Задача заключается вот в чем:
Сформировать массив, содержащий информацию об озерах. Структурный тип содержит поля: название, соленое или пресное, глубина, площадь, судоходное или нет, есть ли места для отдыха, возможна ли рыбалка, замерзает ли зимой. Написать программу, выдающую информацию:
- об озерах, где возможна зимняя рыбалка.
Бился с ней часа 4,сделал,вроде бы,все нормально.Но выдает 6 ошибок.Буду очень признателен за помощь.
Код:
#include "stdafx.h"
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
struct Ozero
{
	char name[20];
	char presnost[20];
	float glubina;
	float ploshad;
	char sudohodstvo[20];
	char otdih[20];
	char ribalka[20];
	char zamerzaet[20];
};


void main(void)
{Ozero b[10],b_new[10];
int kol;
cout<<"Vvedite kolichestvo ozer>";
cin>>kol;
for (int i=0;i<kol;i++)
{
	cout<<"Nazvanie ozera : ";
	cin>>setw(20)>>b[i].name;
	cout<<"Presnoe/ne presnoe : ";
	cin>>setw(20)>>b[i].presnost;
	cout<<"Glubina :";
	cin>>setw(20)>>b[i].glubina;
	cout<<"Ploshad : ";
	cin>>setw(20)>>b[i].ploshad;
	cout<<"Sudohodnoe/ne sudohodnoe : ";
	cin>>setw(20)>>b[i].sudohodstvo;
	cout<<"Nalichie mest otdiha : ";
	cin>>setw(20)>>b[i].otdih;
	cout<<"Nalichie ribalovnih mest : ";
	cin>>setw(20)>>b[i].ribalka;
	cout<<"Zamerzaet li zimoi : ";
	cin>>setw(20)>>b[i].zamerzaet;
	cout<<endl;
}
int kol_new=0;char a[3] = "est";
for (int i=0;i<kol;i++)
{
	if(strcmp (char ozero b[i].ribalka,char a[3])==0)
    {b_new[kol_new]=b[i];
    kol_new++;
	
};

	cout<<"Nazvanie ozera"<<"Prestnost"<<"Glubina"<<"Ploshad";
	cout<<"Sudohodstvo"<<"Mesta otdiha"<<"Ribalka"<<"Zamerzanie"<<endl;
}
for (i=0;i<kol_new;i++)
{cout<<setw(20)<<b_new[i].name<<setw(20)<<b_new[i].presnost<<setw(20)<<b_new[i].glubina<<setw(20)<<b_new[i].ploshad;
cout<<setw(20)<<b_new[i].sudohodstvo<<setw(20)<<b_new[i].otdih<<setw(20)<<b_new[i].ribalka<<setw(20)<<b_new[i].zamerzaet<<endl;
}
}
И возник еще один вопрос:как организовать вывод полной информации об озере по вводу названия с клавы?

Последний раз редактировалось DragoonSki; 16.05.2010 в 11:43.
DragoonSki вне форума Ответить с цитированием
Старый 16.05.2010, 12:28   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
//#include "stdafx.h" по крайней мере для моего компилятора
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
struct Ozero
{
	...
};
int main()//достаточно этого
{Ozero b[10],b_new[10];

...

int kol_new=0; char a[4] = "est";//+одно место для нулевого символа
for (int i=0;i<kol;i++)
{
if(strcmp (b[i].ribalka, a)==0)//тут изменения
    {b_new[kol_new]=b[i];
    kol_new++;	
    };
}
//ну и шапка должна не более 80 символов в длину (ширина экрана)
    cout<<"     ozero"<<" Prestnost"<<"   Glubina"<<"   Ploshad";
    cout<<"   Sudohod"<<"     otdih"<<"   Ribalka"<<"    Zamerz"<<endl;
//};
for (int i=0;i<kol_new;i++)
{cout<<setw(10)<<b_new[i].name<<setw(10)<<b_new[i].presnost<<setw(10)<<b_new[i].glubina<<setw(10)<<b_new[i].ploshad;
cout<<setw(10)<<b_new[i].sudohodstvo<<setw(10)<<b_new[i].otdih<<setw(10)<<b_new[i].ribalka<<setw(10)<<b_new[i].zamerzaet<<endl;
}
system("PAUSE");//какая-нибудь задержка экрана
}
eoln вне форума Ответить с цитированием
Старый 16.05.2010, 13:19   #3
DragoonSki
 
Регистрация: 16.05.2010
Сообщений: 6
По умолчанию

Код:
#include "stdafx.h"
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
struct Ozero
{
	char name[20];
	char presnost[20];
	float glubina;
	float ploshad;
	char sudohodstvo[20];
	char otdih[20];
	char ribalka[20];
	char zamerzaet[20];
};


int main()
{Ozero b[10];
int kol;
cout<<"Vvedite kolichestvo ozer>";
cin>>kol;
for (int i=0;i<kol;i++)
{
	cout<<"Nazvanie ozera : ";
	cin>>setw(20)>>b[i].name;
	cout<<"Presnoe/ne presnoe : ";
	cin>>setw(20)>>b[i].presnost;
	cout<<"Glubina :";
	cin>>setw(20)>>b[i].glubina;
	cout<<"Ploshad : ";
	cin>>setw(20)>>b[i].ploshad;
	cout<<"Sudohodnoe/ne sudohodnoe : ";
	cin>>setw(20)>>b[i].sudohodstvo;
	cout<<"Nalichie mest otdiha : ";
	cin>>setw(20)>>b[i].otdih;
	cout<<"Nalichie ribalovnih mest : ";
	cin>>setw(20)>>b[i].ribalka;
	cout<<"Zamerzaet li zimoi : ";
	cin>>setw(20)>>b[i].zamerzaet;
	cout<<endl;
}

cout<<"Nazvanie ozera"<<"Prestnost"<<"Glubina"<<"Ploshad";
cout<<"Sudohodstvo"<<"Mesta otdiha"<<"Ribalka"<<"Zamerzanie"<<endl;
for (int i=0;i<kol;i++) //цикл вывода информации об озерах с рыбалкой
{
	if ( int strcmp ( const char* ozero b[i].ribalka,const char* 'est')==0)
	{

		cout<<setw(20)<<b[i].name<<setw(20)<<b[i].presnost<<setw(20)<<b[i].glubina<<setw(20)<<b[i].ploshad;

		cout<<setw(20)<<b[i].sudohodstvo<<setw(20)<<b[i].otdih<<setw(20)<<b[i].ribalka<<setw(20)<<b[i].zamerzaet<<endl;
	}
}

for (int i=0;i<kol;i++) // цикл вывода информации об озерах с местами отдыха и судоходством
{
	if (int strcmp(const char* ozero b[i].otdih,const char* 'est')==0 && int strcmp(const char* ozero b[i].sudohodstvo,const char* 'est')==0)
	{
		cout<<setw(20)<<b[i].name<<setw(20)<<b[i].presnost<<setw(20)<<b[i].glubina<<setw(20)<<b[i].ploshad;
		cout<<setw(20)<<b[i].sudohodstvo<<setw(20)<<b[i].otdih<<setw(20)<<b[i].ribalka<<setw(20)<<b[i].zamerzaet<<endl;
	}
}
char b1[10]; //вывод информации об озере по введенному с клавы названию
cout <<"Vvedite nazvanie ozera>"<<endl;
cin>>b1;
for (i=0;i<kol;i++)
{
	if (int strcmp (const char* b1[10],const char* ozero b[i].name)==0)
	{
      cout<<setw(20)<<b[i].name<<setw(20)<<b[i].presnost<<setw(20)<<b[i].glubina<<setw(20)<<b[i].ploshad;
	  cout<<setw(20)<<b[i].sudohodstvo<<setw(20)<<b[i].otdih<<setw(20)<<b[i].ribalka<<setw(20)<<b[i].zamerzaet<<endl;
	}
}
system("PAUSE");

}
Нынешний и конечный вид программы.
И все равно выдает 3 пары одинаковых ошибок.У меня подозрения,что компилятор не ассоциирует b[i].название_поля с самими полями структуры.И подозрения,что я неправильно делаю сравнение строк...
DragoonSki вне форума Ответить с цитированием
Старый 16.05.2010, 13:36   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Лишнего намешано
Код:
for (int i=0;i<kol;i++) //цикл вывода информации об озерах с рыбалкой
{
	if ( strcmp ( b[i].ribalka,"est")==0)
	{

		cout<<setw(20)<<b[i].name<<setw(20)<<b[i].presnost<<setw(20)<<b[i].glubina<<setw(20)<<b[i].ploshad;

		cout<<setw(20)<<b[i].sudohodstvo<<setw(20)<<b[i].otdih<<setw(20)<<b[i].ribalka<<setw(20)<<b[i].zamerzaet<<endl;
	}
}

for (int i=0;i<kol;i++) // цикл вывода информации об озерах с местами отдыха и судоходством
{
	if ( (strcmp(b[i].otdih,"est")==0) && (strcmp(b[i].sudohodstvo,"est")==0))
	{
		cout<<setw(20)<<b[i].name<<setw(20)<<b[i].presnost<<setw(20)<<b[i].glubina<<setw(20)<<b[i].ploshad;
		cout<<setw(20)<<b[i].sudohodstvo<<setw(20)<<b[i].otdih<<setw(20)<<b[i].ribalka<<setw(20)<<b[i].zamerzaet<<endl;
	}
}
char b1[10]; //вывод информации об озере по введенному с клавы названию
cout <<"Vvedite nazvanie ozera>"<<endl;
cin>>b1;
for (int i=0;i<kol;i++)
{
	if (strcmp (b1,b[i].name)==0)
	{
      cout<<setw(20)<<b[i].name<<setw(20)<<b[i].presnost<<setw(20)<<b[i].glubina<<setw(20)<<b[i].ploshad;
	  cout<<setw(20)<<b[i].sudohodstvo<<setw(20)<<b[i].otdih<<setw(20)<<b[i].ribalka<<setw(20)<<b[i].zamerzaet<<endl;
	}
}
eoln вне форума Ответить с цитированием
Старый 16.05.2010, 13:53   #5
DragoonSki
 
Регистрация: 16.05.2010
Сообщений: 6
По умолчанию

Спасибо большое.Тему можно закрывать,удалять.
DragoonSki вне форума Ответить с цитированием
Старый 03.03.2013, 01:32   #6
Infini
 
Регистрация: 02.03.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Лишнего намешано
Код:
	if (strcmp (b1,b[i].name)==0)

}
Объясни пожалуйста почему равен 0?
Infini вне форума Ответить с цитированием
Старый 03.03.2013, 02:00   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Infini, поднимать старые темы не очень хорошо, тем более, что ответ лежит на поверхности, точнее в гугле по первой ссылке:
Функция strcmp() сравнивает в лексикографическом порядке две строки и возвращает целое значение, зависящее следующим образом от результата сравнения.

Код:
Значение	Результат сравнения строк
Меньше нуля	str1 меньше str2
Нуль		str1 равен str2
Больше нуля	str1 больше str2
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Работа со структурами... max382 Помощь студентам 30 05.05.2011 15:56
Работа со структурами (СИ) Александр Елис Помощь студентам 0 03.05.2010 14:45
C++ Работа со структурами Ekatharina Помощь студентам 0 18.01.2010 19:25
работа со структурами - дерево Nostalgia Паскаль, Turbo Pascal, PascalABC.NET 0 24.03.2009 19:45
Работа с массивами и структурами (С/С++) Aliance Помощь студентам 3 28.10.2008 22:28