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

Поиск:

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


Новичок



Профиль
Группа: Участник
Сообщений: 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   Вверх
_hunter
Дата 17.1.2006, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



ну так в чем проблема? что не получается?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Евген
Дата 17.1.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(_hunter @ 17.1.2006, 19:47)
ну так в чем проблема? что не получается?

Сделать самостоятельный ввод кол-ва структур. =( Я вроде стал это делать, но у меня не получилось.
PM MAIL   Вверх
Exekutor
Дата 18.1.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

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



ну что-то вроде:

Код

     int n;
     cout << "введите кол-во структур: ";
     cin >> n;
     FirstElement();
     for (int i = 0; i < n-1; i++) AddNewElement();


Это сообщение отредактировал(а) Exekutor - 18.1.2006, 11:48


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
_hunter
Дата 18.1.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Евген, что именно не получается. а то ответ "я делал, а оно не сделалось" говорит о том, что ты ничего не делал.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Евген
Дата 18.1.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(_hunter @ 18.1.2006, 11:49)
Евген, что именно не получается. а то ответ "я делал, а оно не сделалось" говорит о том, что ты ничего не делал.

Когда я убрал параметр MAXSIZE и вместо него поставил другой параметр, вводимый с клавиатуры, программа не работала. При компиляции - ошибок и предупреждений не было, а при попытке запуска выдавалась ошибка винды. Я попытался запустить созданный экзешник, но он оказался лишь на половину рабочим, т.е он работает только до определённого момента, а дальше выдаёт ошибку.
Добавлено @ 14:36
Цитата(Exekutor @ 18.1.2006, 11:36)
ну что-то вроде:

Код

     int n;
     cout << "введите кол-во структур: ";
     cin >> n;
     FirstElement();
     for (int i = 0; i < n-1; i++) AddNewElement();

Если я правильно тебя понял, то вставив твой код и заменив везде MAXSIZE на n всё будет работать?
PM MAIL   Вверх
_hunter
Дата 18.1.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Цитата(Евген @ 18.1.2006, 13:33 Найти цитируемый пост)

При компиляции - ошибок и предупреждений не было

быть такого не может.
это:
struct Stadium *pStadium[MAXSIZE]
для неконстанты скомпилироваться не могло.

Цитата(Евген @ 18.1.2006, 13:33 Найти цитируемый пост)

Я попытался запустить созданный экзешник, но он оказался лишь на половину рабочим, т.е он работает только до определённого момента, а дальше выдаёт ошибку.

для этого и придумали отладчик.



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Евген
Дата 18.1.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(_hunter @ 18.1.2006, 15:37 Найти цитируемый пост)

быть такого не может.
это:
struct Stadium *pStadium[MAXSIZE]
для неконстанты скомпилироваться не могло.

А вот у меня такое произошло. Поэтому и прошу помощи.
PM MAIL   Вверх
_hunter
Дата 18.1.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



тогда показывай измененный код


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Евген
Дата 18.1.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ф-ция ввода и вывода
Код

#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>

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


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

    for(i = 0; i < kol; 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 kol)
{
    int i, n;

    for(i = 0, n = 0; i < kol; 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"


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

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

    for(i = 0, n = 0; i < kol; 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,kol, Position = -1;

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

    for(i = 0; i < kol; 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>
#include <conio.h>

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

/* Печать информации о всех элементах */
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(" 5. Add element\n"); /* Добавить
       после элемн. с заданным  регистрационным номером */

    printf(" You choice: ");
}
struct Stadium*pStadium[]={NULL};
int main()
{
    int c,kol;
    printf("Vvedite kol-vo:");
    scanf("%i",&kol);
    getch();

    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 5: AddStadium(pStadium);    break;
        default: printf("\n Incorrect choice!!!\n");
        }
    }
    while(c); /* Пока не введут 0 */

    return 0;
}

PM MAIL   Вверх
_hunter
Дата 18.1.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



ну и где ж тут число вместо MAXSIZE вписано?
я вижу только struct Stadium*pStadium[]={NULL};...
и теперь мне интересно: а память кто выделять будет?
+ что за странная разбивка? нельзя что-ли по-нормальному ( целиком ) выложить? или у тебя программа в трех файлах?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Евген
Дата 18.1.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(_hunter @ 18.1.2006, 16:44)
или у тебя программа в трех файлах?

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


Новичок



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

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



hunter , ну так ты сможешь мне помочь? Мне очень нужна твоя помощь. Завтра последний день сдачи работ...
PM MAIL   Вверх
_hunter
Дата 18.1.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



я ж говорю -- выделяй память под массив на полученное число элементов


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Евген
Дата 18.1.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всё бы ничего, но при попытке добавить элемент, выскакивает окошко с сообщением:"...вызвал общую ошибку защиты в модуле ..." и предлагает закрыть программу.
Что мне делать?!?
Выручайте.

Это сообщение отредактировал(а) Евген - 18.1.2006, 19:43
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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