LINUX.ORG.RU

условие для выхода из цикла

 , ,


0

1

есть такой код:

while(strcmp(set,"end"))
	{
		cout << "> ";
		cin >> set >> opt1 >> opt2;
		/*
		 *
		 * set - is char array
		 * opt1 - is int value
		 * opt2 - is int value
		 *
		 */
	}
как перехватить поток , чтобы напечатал
> end
нажал Enter и вышел . на данный момент для выхода вводится end с ненужными параметрами для выхода
> end 0 0
не очень-то и Ъ получается . что подскажете ? как быть ?


Забей всё входящее в строку. Если найдешь пробел, разбери регуляркой и разбей в переменные. Старая школа.

coderage
()
Ответ на: комментарий от conf

На здоровье :) Я так делал, когда учился кодить. Потом с сей перешел на, *блюет*, пхп. Но надеюсь, тебе поможет. Можно еще тупо посчитать количество пробелов (если память не отказала, то c = 21).

Я думаю, что тебе серьезно поможет изучение обычного Си. Там никаких cin нет. Там суровый scanf («%s», &str);, а он гораздо больше расскажет тебе про работу с памятью.

coderage
()
Последнее исправление: coderage (всего исправлений: 2)

Читай сначала set, потом проверяй условие; если «end», выходи через break.

anonymous
()
Ответ на: комментарий от coderage

Я думаю, что тебе серьезно поможет изучение обычного Си

мну желает ООП . (зачем ? да хз) . да и отступать от ++ из-за маленьких трудностей ... нет , надо просто немного смекалки (как про строку) и терпения в изучение =) к тому же , в ++ тоже что-нибудь да есть из инструментов для решения подобных трабл .

conf
() автор топика
Ответ на: комментарий от conf

Ага. Так сразу лучше иди в PHP, оно простое настолько, что каждый кретин... Не буду о грустном.

Короче. Хочешь ХОРОШО знать предметную область - начинай с Асма и Си. Не хочешь - начинай с С++ и чего-угодно-еще. Я тебе это гарантирую.

coderage
()
Ответ на: комментарий от anonymous

Читай сначала set
потом проверяй условие; если «end», выходи через break.

> art
> 0xF 0x1
> art enabled
> art
> 0x0 0x1
> art disabled
> end
> exited ...

нарушается красота приложения . так что не то , да и coderage подсказал норм решение . вот , примерно , так должно быть:

> art 0xF 0x1
> art enabled
> art 0x0 0x1
> art disabled
> end
> exited ...

conf
() автор топика
Ответ на: комментарий от conf

да и coderage подсказал норм решение

Спасибо. Я и не думал, что мои устаревшие знания еще чего-то стОят :D

coderage
()
Ответ на: комментарий от coderage

PHP
каждый кретин
скачай php devel studio for linux
начинай с Асма и Си
Я тебе это гарантирую

ЛОР такой ЛОР *trollface* а я ведь только хотел в магазин за хлебушком сходить ...

conf
() автор топика
Ответ на: комментарий от coderage

остается только догадываться

я вижу некоторые плюсы в C++ (их там два) . мне пшп не нужен , ибо этот инструмент не подходит для решения поставленной задачи . асм ? на написание нужного приложения уйдут десятилетия . а ведь это приложение нужно будет запускать на других платформах . на порт приложения уйдет еще пару лет . так что только ++ .

conf
() автор топика
Ответ на: комментарий от conf

Ты что-то странное говоришь. По твоей логике на порт приложения на С++ не уйдет ни минуты. Ну окей. Думаю, тут разговаривать больше не о чем :)

coderage
()
Ответ на: комментарий от conf

Я, что, предлагал писать кросс-платформенную программу на асме? Ты ничего не перепутал? :) Но я тебе по секрету - архитектура процессора одна и там и там. ;)

coderage
()
Ответ на: комментарий от conf

Начинать не надо было. Я предлагал всякое не тебе и не для того, что ты решил. ;)

coderage
()
Ответ на: комментарий от conf

Если >> хавает isspace'ы (я не в курсе), то проверяешь на end, а если не он, спокойно дохавываешь остальные аргументы.

arturpub ★★
()
Ответ на: комментарий от arturpub

arturpub , спасибо . траблу решил с небольшими костылями . просто сейчас забиваю все в одну строку , а там ее разбираю (или парсю?) =)

conf
() автор топика
Ответ на: комментарий от visual

do{}while()?

нет , но спасибо за отклик =)

conf
() автор топика
Ответ на: комментарий от coderage

Хочешь ХОРОШО знать предметную область - начинай с Асма и Си

Какую именно предметную область?

theNamelessOne ★★★★★
()

Псевдокод:

1. считать set
2. если это "end" → выход
3. считать opt1, opt2

kvap
()

>> opt1 >> opt2;

вот это лишнее. проверяй «end», и выходи если нужно. Если не нужно, то переводи в int, man 3 atoi поможет.

emulek
()
Ответ на: комментарий от coderage

разбери регуляркой

диагностирую php головного мозга.

emulek
()
Ответ на: комментарий от shamaz

LNSP
Local Network Service Provider

понятный и доходчивый ответ :-)
kvap

1. считать set
2. если это «end» → выход
3. считать opt1, opt2

нет , уже писал об этом .
emulek

вот это лишнее

нет , не лишнее . эта параметра осина нада . я рассматриваю с точки зрения минимализации и упрощения кода .

conf
() автор топика
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <readline/readline.h>
#include <readline/history.h>

int main(int argc, char** argv)
{
  char* set = calloc(sizeof(char), 1024);
  char* input;
  int opt1, opt2;
  
  for(;;) 
    {
      input = readline("> ");

      if (!strcmp(input, "end")) 
	{
	  free(input);
	  break;
	}

      sscanf(input, "%s %d %d", set, &opt1, &opt2);

      /* do something... */
      
      free(input);
    } 

  free(set);
  
  return 0;
}
Deleted
()
Ответ на: комментарий от conf

нет , не лишнее . эта параметра осина нада . я рассматриваю с точки зрения минимализации и упрощения кода .

значит ты говнокодер, если упрощаешь код в ущерб читаемости.

emulek
()
Ответ на: комментарий от emulek

значит ты говнокодер

детка , ради тебя я стану кем-угодно :-)

conf
() автор топика
Ответ на: комментарий от emulek

не понимаю эти ваши линуксы . и да - речь не о них шла изначально :З но спасибо , что отметились в теме . с наступающими празднками \:/:\:/

conf
() автор топика
Ответ на: комментарий от Deleted

Нет — free освобождает память, а delete вызывает деструктор.

да. delete вызывает деструктор И освобождает память. Если ты конечно не перезагрузил этот метод своим.

emulek
()
Ответ на: комментарий от conf

не понимаю эти ваши линуксы . и да - речь не о них шла изначально

ну тогда иди нах MSDN читать...

с наступающими празднками

того же.

emulek
()
Ответ на: комментарий от shamaz

ясно , что-то сразу про него подумал , но не был уверен . но синтаксис доставляет . я про (+ 2 3) . кстати , отсюда и cin >> set >> opt1 >> opt2

conf
() автор топика
Ответ на: комментарий от emulek

да. delete вызывает деструктор И освобождает память.
Если ты конечно не перезагрузил этот метод своим.

Я именно об этом и говорил. В общем случае free != delete. Ибо в деструкторе может быть что-угодно.

Deleted
()
Ответ на: комментарий от conf

а если у меня BolgenOS ?

тогда тебе повезло, и все man'ы у тебя по-русски. Все 3.5

emulek
()
Ответ на: комментарий от Deleted

Я именно об этом и говорил. В общем случае free != delete. Ибо в деструкторе может быть что-угодно.

в данном случае ТС ничего не перезагружал и никаких деструкторов не писал.

emulek
()
Ответ на: комментарий от emulek

в данном случае ТС ничего не перезагружал и никаких деструкторов не писал.

Это не меняет того, что в общем случае free != delete.

Deleted
()
Ответ на: комментарий от Deleted

да. delete вызывает деструктор И освобождает память.

Это не меняет того, что в общем случае free != delete.

ещё раз повторим для совсем идиотов?

emulek
()
Ответ на: комментарий от conf

а вот тебе похоже живительно необходимо почитать про iostream в частности про operator>>(). Что на самом деле означают эти закорючки. И на кой ляд они именно такие.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.