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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Входной поток cin считать строку, нубский вопрос 
:(
    Опции темы
Riddik
Дата 30.6.2009, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нужно считать строку из входного потока и положить её в объект string:
Код

#include <iostream>
#include <string>
using namespace tsd;

string temp;
getline(cin, temp);  
cout<<temp<<endl;


Если ввести строку в консоле из нескольких слов и пробелов, затем нажать Enter, то программа будет ждать повторного нажатия Enter, прежде чем выведет temp. Как это исправить?

Т.е. нужно, чтоб как только осуществляется переход на новую строку, temp сохранял введённую строку.
PM MAIL   Вверх
azesmcar
Дата 30.6.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Riddik @  30.6.2009,  15:08 Найти цитируемый пост)
Если ввести строку в консоле из нескольких слов и пробелов, затем нажать Enter, то программа будет ждать повторного нажатия Enter, прежде чем выведет temp. Как это исправить?

 smile 
ты точно тот же самый код привел? Думаю ты его изменил (или снова набрал). Сужу по тому факту - что этот код компилироваться не будет
Цитата

using namespace tsd;

Ну и функции main() нет smile 
покажи весь код, который компилировал и тестировал.

Это сообщение отредактировал(а) azesmcar - 30.6.2009, 15:16
PM   Вверх
andrew_121
Дата 30.6.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(Riddik @  30.6.2009,  15:08 Найти цитируемый пост)
using namespace tsd;

 smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Riddik
Дата 30.6.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да уж опичатался))  Вы правы - проблема не в этом участке. Весь код приводить не буду - громоздкий.

В проблемном месте сначала в консоль вводиться целое число (его нужно сохранить в g2), затем переход на новую строку и вводятся слова через пробел, вот эти слова мне и нужно загнать в temp:
Код

        cin>>g2;
    for(ng2=0; ng2<g2; ng2++)
    {
        min=127;
        minim=0;
        getline(cin, temp); 
        cout<<"Temp: "<<temp<<endl;
      ........................


Не знаю, как осуществить это грамотно. Сейчас, наверное, в temp оказывается '\n'...
PM MAIL   Вверх
bsa
Дата 30.6.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 85
Всего: 196



cin >> g2 >> skipws;

Добавлено через 1 минуту и 10 секунд
в temp тебе надо загнать все слова или по одному? если по одному, то лучше использовать cin >> temp.
PM   Вверх
Riddik
Дата 30.6.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всю строчку )

skipws не помогает, в первой итерации цикла в temp "кладётся" '\n'
PM MAIL   Вверх
azesmcar
Дата 30.6.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Riddik

честно говоря, не совсем понял в чем проблема. Конец дня все таки...можно пример неработающего кода?
возможно тебе cin.ignore() нужен.

PM   Вверх
Riddik
Дата 30.6.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Решил проблему без getline():
Код

cin>>g2;
    unsigned char ch;
    for(ng2=0; ng2<g2; ng2++)
    {
        min=127;
        minim=0;    
        temp.erase();
        cin>>noskipws>>ch;
        for(;;)
        {
            cin>>noskipws>>ch;
            if(ch=='\n') break;
            temp+=ch;
        } 
        cout<<"Temp: "<<temp<<endl;
         ......



azesmcar, в этом месте и была проблема, вместо строки, в temp вводился символ перехода на новую строку в первой итерации. 
Под конец дня тяжко действительно)
PM MAIL   Вверх
bsa
Дата 30.6.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 85
Всего: 196



ну и костыль! Тебе же сказали, используй ignore:
Код
#include <iostream>
#include <string>

int main()
{
        int g;
        std::cout << "Input g = " << std::flush;
        std::cin >> g;
        std::cin.ignore();
        std::cout << "g = " << g << std::endl;
        for(;;) {
                std::string tmp;
                std::getline(std::cin, tmp);
                std::cout << "Line \"" << tmp << "\"" << std::endl;
                if (tmp == "quit")
                        break;
        }
        return 0;
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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