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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2009, 17:43   #1
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию СТРУКТУРЫ

Здравствуйте! В общем проблема такая... Дана задача: Описать структуру с именем Command, содержащую следующие поля: player-игроки команды (массив из 11 строк), nazv- название команды, stadion-домашний стадион. Написать программу, выполняющую ввод с клавиатуры данных в массив Club, состоящий из 16 элементов типа Command. Записи должны быть упорядочены по названию команд. Вывести на экран информацию об игроках команды, введенной с клавиатуры. Если такой команды нет, то вывести соответствующее сообщение.
Так вот, проблема в следующем... Не работает ввод и вывод информации об какой-либо одной команде, т.е что-то в конце программы не так...
Код:
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int i,j;
    const int n=16,p=11; //p-кол-во футболистов, n-кол-во клубов
    struct Command
    {
           char nazv[25];
           char stadion[25];
           char player[25];
    };
    Command Club[n];
    for(i=0;i<n;i++)
    {
                    cout<<"Input nazv"<<"\n";
                    cin>>Club[i].nazv;
                    cout<<"Input stadion"<<"\n";
                    cin>>Club[i].stadion;
                    cout<<"Input players"<<"\n";
                    for(j=0;j<p;j++)
                      cin>>Club[i].player[j];
    }
    cin>>Club.nazv;
    for(i=0;i<n;i++)
    {
    if (Club[i].nazv == Club[0].nazv)    
    cout<<Club[i].nazv;
    else cout<<"Takogo klyba net";
}
    system("PAUSE");
    return EXIT_SUCCESS;
}
frem-dag вне форума Ответить с цитированием
Старый 30.11.2009, 18:59   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
cin>>Club.nazv;
а где индекс ? у вас Club массив
cin>>Club[i].nazv;
i соответственно тот который вам нужен
NiCola999 вне форума Ответить с цитированием
Старый 30.11.2009, 19:48   #3
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию

NiCola999, вот в чём проблема получается... Выше в цикле мы каждому i-тому значению мы присваиваем название клуба, а нужно ввод произвольного названия...
frem-dag вне форума Ответить с цитированием
Старый 30.11.2009, 19:52   #4
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию

Даже,если ставить определённый номер i , то программа всё равно работает не правильно... После ввода клубов, просто заканчивается работа и всё...
frem-dag вне форума Ответить с цитированием
Старый 30.11.2009, 20:06   #5
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

В цикле написано:
cin>>Club[i].player[j];
А в структуре команды у тебя игроки - это не массив строк, а ОДНА строка в 25 символов. Там нужен двумерный массив, иначе получишь ерунду.

Строку cin>>Club.nazv тоже не понял. Видимо, подразумевается, что после ввода самих команд пользователь вводит название одной из них и получает информацию о ней. Тогда заведи отдельную строковую переменную и делай ввод в нее. А то Club.nazv смысла не имеет никакого.

Далее, сравнение:
if (Club[i].nazv == Club[0].nazv)
строки так сравнивать не стоит, а то напорешься на сравнение значений указателей, а не самих строк. Используй функцию strcmp.

P.S.
Еще не стоит описывать типы данных (как у тебя структура Command) внутри функций, без видимых на то причин. Это просто общее соображение - лучше вынести описание вне main'а.
Pashan вне форума Ответить с цитированием
Старый 30.11.2009, 20:35   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Цитата:
нужно ввод произвольного названия...
ну тогда в чем проблема

Код:
char *input;
cin >> input; // запрашиваешь название команды
for(int i=0; i<n; i++)
{
     if(strcmp(input, Club[i].nazv)==0)
         cout << Club[i].nazv;
     else
         cout << "not found";
}
Цитата:
Вывести на экран информацию об игроках команды, введенной с клавиатуры. Если такой команды нет, то вывести соответствующее сообщение.
Ты выводишь только название команды, а надо имена игроков.
А почему у тебя интересно в команде по 1 игроку ?

есть команда, у нее есть название и есть список игроков. След. надо сделать массив имен игроков, а ты создал одну строку в которую можно записать только 1 имя.

Код:
struct Command
    {
           char nazv[25];
           char stadion[25];
           char* player[11];
    };

Последний раз редактировалось NiCola999; 30.11.2009 в 20:57.
NiCola999 вне форума Ответить с цитированием
Старый 30.11.2009, 21:34   #7
Kravnos
 
Аватар для Kravnos
 
Регистрация: 29.11.2009
Сообщений: 7
По умолчанию

По моему организовано правильно:
Код:
struct Command
    {
           char nazv[25];
           char stadion[25];
           char* player[11];
    };
Ибо код в одной из моих программ работает исправно с массивом такого рода (тут полный текст)
Код:
...
const int SIZE=100;
char *w[SIZE] = {0};
char *chr;
...
for(...)
cout<<w[k];
...
Если только я не перепутал, где должна быть "звездочка" =)
Адекватность. Как всегда в меньшинстве.

Последний раз редактировалось Kravnos; 30.11.2009 в 21:40. Причина: Маленькая корректировка
Kravnos вне форума Ответить с цитированием
Старый 30.11.2009, 22:24   #8
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Код:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <string>
	
struct command
{
std:: string nazv;
std:: string stadion;
std:: string player[11];
};

int main()
{
	
	const int n=16;
	
	std:: string s;
	int k = 0;
	int tmp;
	
	command club[n];
	
	for (int i = 0; i < n; i++) {
		std::cout << "Vvedite Hazvanie kommandbl " << std::endl;
		std::cin >> club[i].nazv;
		std::cout << "Vvedite Hazvanie stadiona"<< std::endl;
		std::cin >> club[i].stadion;
		for (int j = 0; j<11; j++) {
			std::cout << "Vvedite im9 igroka kommandbl "<<j+1<<" "<< std::endl;
			std::cin >> club[i].player[j];
		}
	}
	for (int i=n-1; i > n; i--) {
		for (int j = 1; j<6; j++) {
			if (club[j].stadion>club[j+1].stadion) {
				tmp = club[j].stadion;
				club[j].stadion = club[j+1].stadion;
				club[j+1].stadion = tmp;
			}
		} 
	}
	std::cout << "Vvedite Hazvanie komandbl" << std::endl;
	std::cin >> s;
	 for (int i = 0; i < n; i++)
		if (s = club[i].nazv) {
			k++;
			std::cout << "Hazvanie: " << stud1[i].name << "\n"<< std::endl;
			std::cout << "Stadion: " << stud1[i].group << "\n"<< std::endl;
			std::cout << "Players: " << std::endl;
	for (int j = 0; j<11; j++){
		std::cout << club[i].player[j] << std::endl;
		}
	if (k=0) std::cout << "Takix clubov HeT " << std::endl;
	}
	system("pause");
}
Писл в блокноте, так что если что подправь
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 30.11.2009, 23:39   #9
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию

Спасибо всем огромное, сейчас буду переделывать.
frem-dag вне форума Ответить с цитированием
Старый 05.12.2009, 22:15   #10
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию

Код:
for (int i=n-1; i > n; i--) {
		for (int j = 1; j<6; j++) {
			if (club[j].stadion>club[j+1].stadion) {
				tmp = club[j].stadion;
				club[j].stadion = club[j+1].stadion;
				club[j+1].stadion = tmp;
Извеняюсь, что сразу не обратил на это внимание, чтобы не приходилось поднимать тему, но я не совсем понял как работает эта часть программы... Этот цикл для упорядочивания записей? Всё остальное работает отлично.
По условию задачи, нужно упорядочить записи по названию команд, возможно следуюет изменить таким образом?
Код:
const int n=16;
	std:: string s,tmp;
	int k = 0;
	
	command club[n];tmp;
Код:
for (int j=1; j<n+1; j++) {
			if (club[j].nazv>club[j+1].nazv) {
				tmp = club[j].nazv;
				club[j].nazv = club[j+1].nazv;
				club[j+1].nazv = tmp;
			}
		}
frem-dag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структуры masha.dongyz Помощь студентам 2 19.12.2011 20:29
Структуры Wertex Помощь студентам 3 30.10.2009 13:52
С++ структуры KOLYTFR Помощь студентам 2 24.05.2009 19:02
Структуры BaSk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 16.05.2009 15:33
Структуры. Влад-mego Помощь студентам 1 12.04.2009 19:24