Тема: Непустой ввод

Вот начал пробовать кодить (главное слово - пробовать). Запрос ввода строки:

    static void MP_TXT_entxt(void)
    {
        // Add your code for command MP_TXT._mp_txt_center here
        int stat;
        ACHAR txtValue[512];
        ads_point pt1, pt2, ptc; // объявление точек
        acedInitGet (RSG_NONULL, NULL); // запрет пустого ввода
        stat = acedGetString(NULL, _T("\nEnter txt: "), txtValue);
        if (stat != Acad::eOk)
        {
            acutPrintf(_T("Error"));
            return;
        }
    }

Подскажите, пжлст, как зациклить ввод, если ничего не ввели?
P.S. Скажите замечания по этому кусочку
P.S.S. Что такое ACHAR txtValue[512];? Точнее - [512]?

Re: Непустой ввод

Александр Пекшев aka Modis пишет:

P.S. Скажите замечания по этому кусочку

Кроме замечаний пока ничего нет.
1. Установки acedInitGet на acedGetString не влияют - смотри справку
2. Что возвращает acedGetString и почему ты сравниваешь его с Acad::eOk, а не с RTNORM?
3. Для зацикливания используй операторы цикла и проверяй что txtValue не пустой.
4. А по поводу P.S.S. я лучше промолчу - начни с какой-нибудь книжки по C/C++

Re: Непустой ввод

1. Установки acedInitGet на acedGetString не влияют - смотри справку

Тогда Н.Полещуку - "Разработка приложений, настройка и адаптация 2006" стр.378 написано - "Функция acedInitGet предназначена для контроля интерактивного ввода пользователя. Она аналогична LISP-функции intget и должна в нашем примере предшествовать вызову функции acedGetPoint (или аналогичных функций acedGetInt, acedGetReal, acedGetDist, acedGetAngle, acedGetOrient, acedGetKword, acedGetString)."

2. Что возвращает acedGetString и почему ты сравниваешь его с Acad::eOk, а не с RTNORM?

Когда сравнивал с RTNORM вылетала фатальная ошибка акада.

3. Для зацикливания используй операторы цикла и проверяй что txtValue не пустой.

Например? :)

4. А по поводу P.S.S. я лучше промолчу - начни с какой-нибудь книжки по C/C++

А вот на это надо оооочень много времени :( Если поставить конкретную задачу и начать её реализацию - то, разбирая каждую написанную (списанную) строчку, можно немного разобраться во всем.
И я думаю, если на форуме будут "глупые" вопросы, по типу моего, то это поможет таким же начинающим как и я

Re: Непустой ввод

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

Re: Непустой ввод

И все же вопрос был "Как организовать непустой ввод строкового значения?". Было бы неплохо увидеть какой-нить примерчик

Re: Непустой ввод

static void GetNotEmptyString(void)
{
  ACHAR ans[512] = _T("");
  int rc;
  while ((rc = acedGetString(TRUE,_T("\nВведите непустую строку: "),ans)) != RTCAN && AcString(ans).isEmpty()) {
    acutPrintf(_T("\nБыла введена пустая строка. Повторите!"));
  };
  if (rc != RTCAN) {
    acutPrintf(_T("\nВведена строка: <%s>"),ans);
  } else {
    acutPrintf(_T("\nПользователь отказался от ввода! :("));
  }
}

Re: Непустой ввод

Вот спасибо :)
Сегодня хочу сходить в книжный магазин и посмотреть что-нить по С++, но боюсь, что куплю плохую книгу :(

Re: Непустой ввод

Я тебе как то называл хорошую книгу (очень хорошую), но ты и бровью не повёл.

Re: Непустой ввод

Н.Н. Мартынов. Программирование для Windows на С/С++ Том 1 и Том 2. Издательство ООО "Бином-Пресс".
Года выпуска 2004 и 2006 соответственно. Я лучше учебника не встречал. Оба тома ориентрованы на Visual C++ 6.0, но нет никаких препятствий к использованию в процессе обучения соврменных версиии Visual Studio.
Если много свободного времени и упорства, то реально оба тома освоить за один учебный год. Только после этого можно открывать arxlabs.

Вот только к сожалению в нашем городе в магазинах выбор не велик :( Сложно найти. А заказывать - дороговато пока-что...

Re: Непустой ввод

1. Установки acedInitGet на acedGetString не влияют - смотри справку
Тогда Н.Полещуку - "Разработка приложений, настройка и адаптация 2006" стр.378 написано - "Функция acedInitGet предназначена для контроля интерактивного ввода пользователя. Она аналогична LISP-функции intget и должна в нашем примере предшествовать вызову функции acedGetPoint (или аналогичных функций acedGetInt, acedGetReal, acedGetDist, acedGetAngle, acedGetOrient, acedGetKword,  acedGetString )."

Замечание принимаю - acedGetString из этого списка надо выбросить (аналогично функции getstring в лиспе).

P.S.S. Что такое ACHAR txtValue[512];? Точнее - [512]?

Это массив символов, 512 - его длина.

Re: Непустой ввод

Уважаемый Александр, в вашем коде

static void GetNotEmptyString(void) 
{ 
  ACHAR ans[512] = _T(""); 
  int rc; 
  while ((rc = acedGetString(TRUE,_T("\nВведите непустую строку: "),ans)) != RTCAN && AcString(ans).isEmpty()) { 
    acutPrintf(_T("\nБыла введена пустая строка. Повторите!")); 
  }; 
  if (rc != RTCAN) { 
    acutPrintf(_T("\nВведена строка: <%s>"),ans); 
  } else { 
    acutPrintf(_T("\nПользователь отказался от ввода! ")); 
  } 
}

есть строка

&& AcString(ans).isEmpty()

Так вот - она не работает :( В следствии этого цикл работает бесконечно пока не нажали ESC. Понимаю, что это проверка на непустой ввод, но при компиляции вылетает ошибка. Дословно не помню, но что-то типа

Выражение, стоящее слева от isEmpty должно быть классом

. Или не классом - точно не помню

Re: Непустой ввод

#include <AcString.h>