Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура на Си... Помогите, пожалуйста. 
:(
    Опции темы
Евген
Дата 17.1.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.11.2005

Репутация: нет
Всего: нет



Ребят помогите, пожалуйста, со структурами.
Вот задание:

Для решения задачи разработать 3 ф-ции:
-ввод и вывода.
-главную ф-цию.
-ф-цию обработки массива.
Динам выделение памяти + файл-проект.
Структура "Стадион":название; адрес; вместимость; виды спорта.
Удалить элемент с заданным номером, добавить 2 элемента после элемента с указанным именем.
Проблема в том, что препод требует, чтобы я сам вводил количество структур. Я пробовал переделать, но у меня, к сожалению, ничего не получилось. Помогите пожалуйста. Работу нужно сдавать 19го.
Вот мой код:

ф-ция ввода и вывода
Код
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>

/* Описание структуры Stadium */
#include "Stadium.h"

#define MAXSIZE 100

/* Ввод информации о машине */
void NewStadium(struct Stadium *pStadium[])
{
    int i;

    for(i = 0; i < MAXSIZE; i++)
    {
        if(pStadium[i] == NULL)
        {
            pStadium[i] = malloc(sizeof(struct Stadium));

            printf("\n Enter info about Stadium:\n");

            printf(" Name: ");
            flushall();
            scanf("%s", pStadium[i]->Name);

            printf(" Address: ");
            flushall();
            scanf("%s", pStadium[i]->Address);

            printf(" Sport: ");
            flushall();
            scanf("%s", pStadium[i]->Sport);

            printf(" Capacity: ");
            flushall();
            scanf("%d", &pStadium[i]->Capacity);

            return;
        }
    }
}

/* Печать информации о всех машинах */
void PrintStadium(struct Stadium *pStadium[])
{
    int i, n;

    for(i = 0, n = 0; i < MAXSIZE; i++)
    {
        if(pStadium[i] != NULL)
        {
            n++;
            
            printf("\n Stadium %d:\n", n );
            printf(" Name:         %s\n", pStadium[i]->Name);
            printf(" Address:         %s\n", pStadium[i]->Address);
            printf(" Sport:       %s\n", pStadium[i]->Sport);
            printf(" Capacity: %d\n", pStadium[i]->Capacity);
        }
    }
}

ф-ция обработки
Код
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

/* Описание структуры Stadium */
#include "Stadium.h"

#define MAXSIZE 100

/* Удаляет элемент с заданным номером*/
void DelStadium(struct Stadium *pStadium[])
{
    int i, n, k;

    do
    {
        printf("\n Enter element number for delete: ");
        scanf("%d", &k);
    }
    while(k < 1);

    for(i = 0, n = 0; i < MAXSIZE; i++)
    {
        if(pStadium[i] != NULL) n++;

        if(n == k)
        {
            pStadium[i] = NULL;
            printf("\n Element %d deleted!\n", n);
            return;
        }
    }
    printf("\n Element %d does not exist!!!\n", n);
}

/* Добавление информации после элем. с заданным регист. ном. */
void AddStadium(struct Stadium *pStadium[])
{
    struct Stadium Buf;
    char Name[100];
    int i, Position = -1;

    /* Рег. номер, за которым нужно поместить новый элемент */
    printf("\n Enter name for replace: ");
    scanf("%s", Name);

    for(i = 0; i < MAXSIZE; i++)
    {
        if(pStadium[i] != NULL)
        {
            Buf = *pStadium[i];
            if((strstr(Buf.Name, Name)) != NULL)
                Position = i;
        }
    }

    if(Position == -1) /* Если элемемент с заданным регистрац. № не найден */
    {
        printf("\n Element with name %s not found!!!\n", Name);
        return;
    }

    /* Ввод данных во временную переменную Temp */
    printf("\n Enter info about Stadium:\n");

    printf(" Name: ");

    scanf("%s", pStadium[Position + 1]->Name);

    printf(" Address: ");
    scanf("%s", pStadium[Position + 1]->Address);

    printf(" Sport: ");
    scanf("%s", pStadium[Position + 1]->Sport);

    printf(" Capacity: ");
    scanf("%d", &pStadium[Position + 1]->Capacity);
}

главная ф-ция
Код
#include <stdio.h>

/* Описание структуры Stadium */
#include "Stadium.h"

/* Максимально возможное кол-во элементов */
#define MAXSIZE 100

/* Печать информации о всех элементах */
void PrintStadium(struct Stadium *pStadium[]);

/* Ввод информации о элементе */
void NewStadium(struct Stadium *pStadium[]);

/* Удаляет элемент с заданным номером */
void DelStadium(struct Stadium *pStadium[]);

/* Добавление информации после элем. с заданным регист. ном. */
void AddStadium(struct Stadium *pStadium[]);

/* Отрисовка меню */
void Menu()
{
    printf("\n ---------MENU--------- \n");
    printf(" 0. Exit\n");
    printf(" 1. New element\n"); /* Добавть запись */
    printf(" 2. Remove element\n"); /* Удалить запись */
    printf(" 3. Print all elements\n"); /* Вывести на экран */
    printf(" 4. Add element\n"); /* Добавить
       после элемн. с заданным  регистрационным номером */

    printf(" You choice: ");
}

int main()
{
    int c;
    struct Stadium *pStadium[MAXSIZE] = {NULL}; /* Массив указателей */

    do
    {
        Menu();
        scanf("%d", &c);

        /* Обработка меню */
        switch(c)
        {
        case 0: break;
        case 1: NewStadium(pStadium);   break;
        case 2: DelStadium(pStadium);   break;
        case 3: PrintStadium(pStadium); break;
        case 4: AddStadium(pStadium);    break;
        default: printf("\n Incorrect choice!!!\n");
        }
    }
    while(c); /* Пока не введут 0 */

    return 0;
}

PM MAIL   Вверх
NixoL
Дата 17.1.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.6.2005

Репутация: нет
Всего: нет



Цитата

scanf("%d", &c);

По моему надо так :
Код

scanf("%d", c);


и здесь :
Цитата

        case 1: NewStadium(pStadium);  break;
        case 2: DelStadium(pStadium);  break;
        case 3: PrintStadium(pStadium); break;
        case 4: AddStadium(pStadium);    break;

в функции pStadium передается без индекса


PM MAIL   Вверх
Евген
Дата 17.1.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.11.2005

Репутация: нет
Всего: нет



Этот код наверно и с изъянами, но он хотябы рабочий...А то что от меня требует препод у меня никак не получается сделать =(
PM MAIL   Вверх
BreakPointMAN
Дата 18.1.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 2
Всего: 24



Цитата(NixoL @ 17.1.2006, 20:48)
Цитата

scanf("%d", &c);

По моему надо так :
Код

scanf("%d", c);

Это по-твоему... в scanf должен передаваться адрес переменной, все там правильно, не надо людей путать.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Евген
Дата 18.1.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.11.2005

Репутация: нет
Всего: нет



Ну, а если по существу? Я пытался везде заменить MAXSIZE на вводимый параметр. И в конце концов у меня так и ничего и не получилось. =( Ребят, помогите пожалуйста. Завтра обязательно нужно её сдать...
PM MAIL   Вверх
Евген
Дата 19.1.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.11.2005

Репутация: нет
Всего: нет



Всем спасибо за активное участие в обсуждении моей проблемы. Сегодня я благополучно сдал и защитил эту программу. Тему можно закрывать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0740 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.