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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2011, 20:09   #1
Елена_05
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 55
По умолчанию Структура с++

подскажите пожалуйста, как удалить элемент массива. У меня он выдает ошибку. Вот текст проги.

Код:
#include <iostream.h>
main()
{
    struct AUTO /*это моя структура*/
       {
     int nomerauto;
     char fio[25];
     int marschrut;
     int nomer;   
        };
      int a,r; 
      AUTO *q;        /*q-указатель для выделении памяти*/  
      int i; 
      printf ("razmer massiva > "); /* ввод размера массива*/
      scanf ("%d", &a);
      q = new AUTO [a];
             
             for(i=0; i<a;i++)
           {
             cout<<endl;
             cout<<"vvod "<<i<<" -ogo "<<endl;
             cout<<"vvedite nomerauto "; cin>>q[i].nomerauto;
             cout<<"vvedite fio: ";cin>>q[i].fio;
             cout<<"vvedite nomer marscruta ";cin>>q[i].marschrut;
           }
                     
           for(i=0; i<a;i++)                          
           {
             cout<<endl;
             cout<<"nomerauto "<<q[i].nomerauto<<endl;;        /* ВЫВОД МАССИВА СТРУКТУРЫ*/
             cout<<"fio: "<<q[i].fio;
             cout<<"nomer marscruta "<<q[i].marschrut;                  
           }  
                 
           cout<<"vvedite nomer viezda"<<endl; cin>>q[i].nomer;
           for (i=0;i<a;i++)
          {
           if(q[i].nomer==q[i].nomerauto) delete (q[i]);
           } 
 
delete q;                            
cin.ignore();
getchar();
}

Последний раз редактировалось ACE Valery; 30.05.2011 в 21:42.
Елена_05 вне форума Ответить с цитированием
Старый 30.05.2011, 20:28   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

delete освобождает память, выделенную динамически, а не удаляет элементы массива.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 30.05.2011, 20:29   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

В суть особо не вникал, поправил то, что бросилось в глаза.
Код:
#include <iostream>   //без .h - это устаревший вариант

using namespace std;
/*
using std::cout;
using std::cin;
using std::endl;
*/

//В неустаревшем варианте либо один из этих двух вариантов, либо везде писать std::cout, std::cin, std::endl

struct AUTO /*это моя структура*/   //Зачем запихивать в main?
{
int nomerauto;
char fio[25];
int marschrut;
int nomer; 
};

int main()   //Неявный int - плохо! Хороший компилятор вообще должен ругаться
{
int a,r; 
AUTO **q; /*q-указатель для выделении памяти*/
    //Нужно массив указателей, чтоб удалять
int i; 
printf ("razmer massiva > "); /* ввод размера массива*/
scanf ("%d", &a);   //Кстати, зачем printf и scanf, если в этой же программе уже используем cout и cin?
q = new AUTO* [a];

for(i=0; i<a;i++)
  {   //Форматирование - наше все!
  q[i] = new AUTO;
  cout<<endl;
  cout<<"vvod "<<i<<" -ogo "<<endl;
  cout<<"vvedite nomerauto ";
  cin>>q[i].nomerauto;
  cout<<"vvedite fio: ";
  cin>>q[i] -> fio;
  cout<<"vvedite nomer marscruta ";
  cin>>q[i] -> marschrut;
  }

for(i=0; i<a;i++) 
  {
  cout<<endl;
  cout<<"nomerauto "<<q[i] -> nomerauto<<endl;; /* ВЫВОД МАССИВА СТРУКТУРЫ*/
  cout<<"fio: "<<q[i] -> fio;
  cout<<"nomer marscruta "<<q[i] -> marschrut; 
  } 

cout<<"vvedite nomer viezda"<<endl; cin>>q[i].nomer;
for (i=0;i<a;i++)
  {
  if(q[i] -> nomer==q[i] -> nomerauto)
    {
    delete q[i];
    for (int j = i; j < a - 1; j++)
      q[i] = q[i + 1];
    a--;
    i--;
    }
  } 

for (int i = 0; i < a; i++)   //Удалить все оставшиеся
  delete q[i];
delete[] q;   //Для массивов - delete[], а не delete
cin.ignore();
cin.get();   //Чего уж тут getchar, когда cin
}
Как-то так. Кое-где, возможно, что-то пропустил, но, надеюсь, исправите если что.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 30.05.2011, 20:29   #4
Елена_05
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 55
По умолчанию

А как же удалить элемент массива?Подскажи
Елена_05 вне форума Ответить с цитированием
Старый 30.05.2011, 20:31   #5
Елена_05
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 55
По умолчанию

спасибо, щас посмотрю код
Елена_05 вне форума Ответить с цитированием
Старый 30.05.2011, 20:33   #6
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Код:
А как же удалить элемент массива?
Сдвинуть все после него на один назад, тем самым его затерев.
Или можно выделит новую память под массив на 1 элемент меньший, перекопировать туда все, кроме удаляемого, и удалить старый массив.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 30.05.2011, 20:34   #7
Елена_05
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 55
По умолчанию

он выдает такую ошику, я что-то раньше ее не встречала, хотя на с++ работаю не очень то долго, как испрать не знаете?
Structure required on left side of . or .*
Елена_05 вне форума Ответить с цитированием
Старый 30.05.2011, 20:38   #8
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Код:
for(i=0; i<a;i++)
  {   //Форматирование - наше все!
  q[i] = new AUTO;
  cout<<endl;
  cout<<"vvod "<<i<<" -ogo "<<endl;
  cout<<"vvedite nomerauto ";
  cin>>q[i].nomerauto;
  cout<<"vvedite fio: ";
  cin>>q[i] -> fio;
  cout<<"vvedite nomer marscruta ";
  cin>>q[i] -> marschrut;
  }
Смекаете?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 30.05.2011, 20:49   #9
Елена_05
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 55
По умолчанию

да, догадалась)
Елена_05 вне форума Ответить с цитированием
Старый 30.05.2011, 20:56   #10
Елена_05
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 55
По умолчанию

а вы не могли бы объяснить ты часть в которой происходит удаление элемента, я не могу полностью понять (так как у нас этой темы не было а сдават прогу через 2 дня)
Елена_05 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура Seferus Общие вопросы C/C++ 0 15.11.2010 13:55
Структура roknroll1 Помощь студентам 2 25.01.2010 18:45
структура hungry Общие вопросы C/C++ 11 25.06.2009 20:31
структура Cpluser Общие вопросы C/C++ 4 16.06.2009 17:42
Структура SL1CK Общие вопросы C/C++ 8 08.06.2009 21:31