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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно прировнять поля структур? не правильно работает алгоритм( 
V
    Опции темы
Sergio
Дата 24.4.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Всем привет. Вот функция которая проверяет в листе есть ли уже такой "контактёр" (с таким же IP). Если есть, то меняет имя контактёра и "выходит" из цикла. У меня проблема: два поля структуры с одинаковім IP. Но они почемуто не "приравниваются"  smile Может я не правильно приравниваю?? Вот функция:
Код

  struct Package {
    char Message[512];
    char IP[15];
    char ComputerName[20];
    char NickName[10];
    char TypeMsg[10];
   };
 vector<Package> ContactList;

//---------------------------------------------

void SearchInList(Package pack) {

 if(ContactList.size()!= 0)      //если лист пустой то заносится сразу  инфа о "кантактёре"
  {
   bool hasNext=true;
   int count=0;
    for(int a=0; a<ContactList.size(); a++)
     {
      if(ContactList.at(a).IP == pack.IP)   // вот этот кусок во второй раз не исполняется Почему?
       {
        StrCopy(ContactList.at(a).NickName, pack.NickName);
         //MessageBox(0, "Yes", "Ok", 0);
          break;
       }
      else {
        if(hasNext == false)
         {
           ContactList.push_back(pack);
         }
          continue;
       }
        if(ContactList.size() == ++count)
          hasNext = false;
     }
  }
  else {
    ContactList.push_back(pack);
   }
 }

Помогите плз разобратся. 

Это сообщение отредактировал(а) Sergio - 24.4.2007, 13:02
PM MAIL ICQ   Вверх
Daevaorn
Дата 24.4.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Sergio, посмотри тут
http://www.cppreference.com/sdstring/strcmp.html

Это сообщение отредактировал(а) Daevaorn - 24.4.2007, 13:47
PM MAIL WWW   Вверх
Sergio
Дата 24.4.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Daevaorn, ссылка не работает
PM MAIL ICQ   Вверх
likehood
Дата 24.4.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


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

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



Sergio, строки надо сравнивать так (на равенство):
Код

if (!strcmp(ContactList.at(a).IP, pack.NickName))


Добавлено через 48 секунд
И не забудь подключить <string.h>
PM MAIL   Вверх
dizzy1984
Дата 24.4.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Sergio @  24.4.2007,  13:00 Найти цитируемый пост)
if(ContactList.at(a).IP == pack.IP) // вот этот кусок во второй раз не исполняется Почему?

В с/с++ нельзя непосредственно сравнивать массивы.
В данном случае ContactList.at(a).IP имеет тип char[15] и происходит его неявное преобразование к char *.
Т.е сравниваются 2 указателя.
Для сравнения содержимого строки используйте, например,strcmp

PM MAIL   Вверх
Goganchic
Дата 24.4.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



dizzy1984, абсолютно прав.
А еще, как вариант можно использовать вместо массива символов С++ STL тип string, и там твое сравнение (типа if(a==b) ) будет воспринято вполне нормально. Но только этот класс работает медленнее, чем просто массив символов.
PM Jabber   Вверх
Sergio
Дата 24.4.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Всем спасибо. Теперь работает.
PM MAIL ICQ   Вверх
JackYF
Дата 24.4.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Goganchic @  24.4.2007,  13:54 Найти цитируемый пост)
Но только этот класс работает медленнее, чем просто массив символов. 

Это смотря как использовать smile



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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