Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Непонятная ошибка  (Прочитано 9221 раз)
0 Пользователей и 1 Гость смотрят эту тему.
spooky
Новенький

ru
Offline Offline
Пол: Женский

« : 16-12-2013 18:25 » 

Доброго времени суток.
Ребята, очень срочно, нужно успеть до среды, помогите пожалуйста!
В C++ Builder с помощью библиотеки Winsock написаны две программы: клиент и сервер.
 Задание звучит так:
Клиентская программа оправляет на сервер пару целых чисел a и b, а также символ арифметической операции «+», «-», «*», «/» (числа и знак операции задаются через пользовательский интерфейс клиента), а сервер возвращает результат выполненной арифметической операции. 
Обе формы выложила на обменник: http://rusfolder.com/39163144
Проблема вот в чем: компилируется все без ошибок, все замечательно, но при отправке данных на сервер выскакивает вот такая штучка: http://cs314825.vk.me/v314825234/6482/XmxxSrxIGC8.jpg и результат не выводится.
И я никак не могу от неё избавиться. Жаль
Что не так, как это убрать?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 16-12-2013 19:01 » 

Столь информативно ругается серверная или клиентская часть?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
spooky
Новенький

ru
Offline Offline
Пол: Женский

« Ответ #2 : 16-12-2013 19:05 » 

Finch, сервер.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 16-12-2013 19:12 » 

Откомпилируй в дебаг режиме. Поставь точку останова на своей принимаюшей функции. И пошагово пройдись по программе.
PS. Кстати, а зачем такое изврашение? Почему нельзя использовать просто строчку String? Обязательно нужно бросать на форму TEdit в режиме unvisible?
« Последнее редактирование: 16-12-2013 19:21 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
spooky
Новенький

ru
Offline Offline
Пол: Женский

« Ответ #4 : 16-12-2013 20:03 » 

Делала по примеру с аналогичным заданием, поэтому и извращение, наверное.

Попробовала (попыталась) сделать так, как Вы сказали, и, насколько я поняла, ругается на эту строчку:
 
Код: (C++)
char c=MyList->operator [](2)[0];
А вот что с  ней не так - не пойму.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 16-12-2013 20:27 » new

Насколько я понял по примерам. из TString символ рекомендуют вытаскивать так
Код: (C++)
 char c=MyList->operator [](2)(0);
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
spooky
Новенький

ru
Offline Offline
Пол: Женский

« Ответ #6 : 16-12-2013 20:39 » 

Так на круглые скобки ругается.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 16-12-2013 22:41 » 

А какая религия запрещает написать вызов оператора по-человечески?
Код: (C++)
char c = (*MyList)[2][0];
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
spooky
Новенький

ru
Offline Offline
Пол: Женский

« Ответ #8 : 16-12-2013 23:07 » 

Dimka,  выкидывает всё то же пустое окошко. Жаль
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 17-12-2013 01:15 » 

Слона нужно кушать по частям.

Во-первых, закомментируй всю арифметику и убедись, что сервер принимает от клиента нечто и возвращает клиенту то самое, что и было получено. И что всё это работает устойчиво и без ошибок. И только потом принимайся за обработку.

Во-вторых, добейся устойчивого распознавания строк. Т.е. разобранную строку собирай обратно и отправляй клиенту без арифметики. Почему разделитель является одиночным символом, а не строкой? Почему этот символ двухбайтовый с префиксом L типа wchar_t, хотя рабочим типом данных является однобайтовый char? Думай над каждым значком в коде: что он означает и зачем написан. Почему функции преобразования строк в числа ты пытаешься "скормить" не строку из MyList, а одиночный символ этой строки - для чего [0]?

В-третьих, почему аргументы типа float - вещественные числа, а результат типа int - целое?
« Последнее редактирование: 17-12-2013 01:20 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
spooky
Новенький

ru
Offline Offline
Пол: Женский

« Ответ #10 : 17-12-2013 07:29 » 

Ребята! Спасибо, что заморочились!
Я поняла, что с MyList у меня ничего не получится, поэтому плюнула на него и переписала этот проблемный кусок программы на вот что:
Код: (C++)
TStringList *stringList = new TStringList;
stringList->Delimiter = ';';
stringList->Clear();
stringList->DelimitedText=Edit1->Text;
AnsiString s1 = stringList->Strings[0];
AnsiString s2 = stringList->Strings[1];
AnsiString s3 = stringList->Strings[2];
 int a=atoi(s1.c_str());
 int b=atoi(s2.c_str());
 char c=s3.c_str()[0];

Теперь всё работает правильно и без ошибок.  Улыбаюсь
Ещё раз спасибо за потраченное время!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines