Страница 1 из 2

Игнорировать пробел

Добавлено: 07 дек 2009, 14:36
б_д_в
Привет.
В консольном приложении, строка заканчивается после знака пробел (cin >> m_string). А мне надо, чтобы только после Enter’a, а пробелы воспринимались, как и в EditBox’e диалогового окна. Что здесь можно предпринять?

Re: Игнорировать пробел

Добавлено: 07 дек 2009, 16:13
Albor
б_д_в писал(а):Привет.
В консольном приложении, строка заканчивается после знака пробел (cin >> m_string). А мне надо, чтобы только после Enter’a, а пробелы воспринимались, как и в EditBox’e диалогового окна. Что здесь можно предпринять?

Код: Выделить всё

char arr[256];
cin.getline(arr,255);

Re: Игнорировать пробел

Добавлено: 07 дек 2009, 20:03
б_д_в
Спасибо за ответ. Но, я кажется неверно сформулировал вопрос. Вопрос состоит как указано ниже, без лишних подробностей…

Код: Выделить всё

struct card 
{
       char *string1; 
       char *string2;  
       char *string3;   
};
…………………………
main()
{
      int n;
      card a;

      for(…)
      {
           a.string1 = new char[50];
           cin >> a.string1;
           b[n].string1 = a.string1;

           a.string2 = new char[50];
           cin >> a.string2;
           b[n].string2 = a.string2;

           a.string3 = new char[50];
           cin >> a.string3;
           b[n].str3 = a.string3;

           n++;
        }
        ………………………………
        //Далее вывод в консоль с помощью специальной функции
}
Все получается если в a.string1, a.string2, a.string3 нет пробелов. Если есть … программа воспринимает пробелы как нажатие Enter и раньше времени выводит не то что надо.

Re: Игнорировать пробел

Добавлено: 08 дек 2009, 13:18
Albor
Ещё раз для тех кто не понял: cin>> будет читать до первого разделителя, если нужно считать текст с разделителями, то нужно использовать cin.getline(), читающий до символа, передаваемого в 3-м параметре - '\n' по умолчанию.

Re: Игнорировать пробел

Добавлено: 08 дек 2009, 17:26
Airhand
б_д_в писал(а):Все получается если в a.string1, a.string2, a.string3 нет пробелов.
Тогда убирай/заменяй их перед выполнением каких-то действий. И всё.

Re: Игнорировать пробел

Добавлено: 08 дек 2009, 21:40
б_д_в
Увы Albor, cin.getline(a.string1(2)(3), 50, '\n') или cin.getline(a.string1(2)(3), 50) не работет...результат тот же, что и cin >> a.string1(2)(3).

Airhand, как убирать/заменять их перед выполнением (извиняюсь за тупость).

Всем спасибо.

Re: Игнорировать пробел

Добавлено: 09 дек 2009, 08:14
Albor
б_д_в писал(а):cin.getline(a.string1(2)(3), 50) .
Что означает выделенное красным? Должно быть

Код: Выделить всё

 cin.getline(a.string1,50);
Или покажи свой код с getline()

Re: Игнорировать пробел

Добавлено: 09 дек 2009, 12:13
б_д_в
cin.getline(a.string1(2)(3), …); - записано для краткости. Имеется ввиду: cin.getline(a.string1, …); cin.getline(a.string2, …); cin.getline(a.string3, …);

Использую так же как описано выше (в исходнике), только вместо cin >> a.string1(2)(3); пишу cin.getline(a.string1(2)(3), 50, '\n'); или без '\n'(оно подразумевается по умолчанию).

Re: Игнорировать пробел

Добавлено: 09 дек 2009, 13:20
Airhand
У тебя string (1,2,3) - это массив символов. Пробегаешся по массиву и убираешь/заменяешь пробелы.

Re: Игнорировать пробел

Добавлено: 09 дек 2009, 13:28
Albor
б_д_в писал(а):Увы Albor... не работет...результат тот же, что и cin >> a.string1(2)(3).
...//Далее вывод в консоль с помощью специальной функции
getline() работает - проверено! :) Давай весь код. Ты уверен, что "обрезка" происходит при вводе? Дебаггером смотрел? Не освобождаешь ли память после копирования указателя (ты ведь копируешь указатель, а не содержимое массива)?