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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование в список, проверка на повтор 
:(
    Опции темы
ihbo
Дата 24.4.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здраствуйте. 
И так: 
Необходимо в цикле, копировать переменную в список, но при этом делать проверку, на предмет "одинаковости", т.е. если значение переменной != имеющимся значениям в списке, то копируем это знаение, если такое же значение есть, то не копируем. 
Делаю это так: 
Код

int i2=1,i3; 
int comp; 
i=0; 
do{ 
//Провожу серию операций, в итоге получаю s51 - типа char. 
 if(!i) 
      strcpy(mas0[i].ipadr->ipadr,s51); // для того, чтобы заполнить 0 элемент списка. До этого он у нас был пустой 
     if(i) 
    { 
     comp=1; 
     for(i3=0;i3<i2;i3++) 
     { 
      if(mas0[i3].ipadr->ipadr==s51) 
      { 
     comp=0; 
     break; 
       } 
      if(comp) 
      { 
       strcpy(mas0[i2].ipadr->ipadr,s51); 
      cout << i2 << " " << s51 << " " << mas0[i2].ipadr->ipadr << endl; 
      i2++; 
      } 
     } 
    } 
i++; 
}while(!feof(d))    

Собстна вот, но кривовато как то работает, проблемы с доступом к памяти. 

Доп инфа: 
Вот объявляю я это дело так: 
Код

struct ip { 
char ipadr[18]; 
ip* next; 
} ; 

 struct IPA { 
ip* ipadr; 
Link* L; 
  }; 

void main() 
{ 
... 
IPA *mas0; 
mas0=new IPA[p]; 
... 
}    

Обшибку при след прходе цикла выдает вот здесь: 
Код

strcpy(mas0[i2].ipadr->ipadr,s51);

Приношу извинения за несколько сумбурное прдставление проблемы, но весьма и весь срочно необходимо ее решить, буквально к завтрашнему обеду  
Заранее спасибо. 
PM MAIL   Вверх
MAKCim
Дата 25.4.2006, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Код

strcpy(mas0[i].ipadr->ipadr,s51)


прототип strcpy
Код

char* strcpy(char* dest, const char* src);

а у тебя s51 - char или все таки char*? Если char* то может s51 не заканчивается \0 или имеет размер больше 18?
Цитата

Код

if(mas0[i3].ipadr->ipadr==s51) 


так сравнивать нельзя (сравниваютя адреса, т. е указатели), есть strcmp
Код

if (!strcmp(mas0[i3].ipadr->ipadr,s51)) {...}
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
ihbo
Дата 25.4.2006, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну да, конечно.
char *s51;
Нет, размер нормальный

А так, я делаю проверку на наличие /0 Но это уже после того как запишу в mas0[i].ipadr->ipadr
Код

        char* k = mas0[i].ipadr->ipadr;
        while(*k)
        {
            if(*k == '\n')
            *k = '\0';
            k++;
        }


Цитата

так сравнивать нельзя (сравниваютя адреса, т. е указатели), есть strcmp


Да да, конечно, изночально выглядело так:
Код

if(strcmp(mas0[i3].ipadr->ipadr,s51))

Это, я уже потом "исправил", различные варианты пробовал.
 
PM MAIL   Вверх
Hose
Дата 25.4.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(ihbo @  24.4.2006,  21:09 Найти цитируемый пост)
mas0=new IPA[p];

может у тебя p меньше 2х и ты выделяешь мало памяти. 
Еще ты не привел код, в котором иничиализируешь указатели mas0[i].ipadr и где выделяешь соответствующую память. Возможно ты забыл это сделать. 
PM MAIL   Вверх
ihbo
Дата 25.4.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Списибо за участите.
Но все оказалось гараздо проще smile
Собстна, в  s51 писалось с символом \n а в mas0[i].ipadr без него, т.е. были они разные, и одинкаковых там вообще не было smile

Маленько подправил+цикл изменил маненько, теперь все рабоатет номано. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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