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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с вводом значений в vector 
V
    Опции темы
v_123
Дата 8.3.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Неоходимо считать последовательность строк из потока ввода до слова quit.
Подскажите, пожалуйста, почему после операции  in.push_back(temp); или in[i]=temp; 
в функции f2(), vector <string> in остается пустым, по крайней мере cout << in[i]; ничего не выводит.
И, желательно, - как правильно присваивать значения вектору.

Код

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

string buf;
vector <string> in(10);
int i=0;

void f1()
{    
    i=0;
    do 
    {    
        cin >>buf;
        cout << buf << " ";
    }
    while (buf!="quit");
};

void f2()
{
    int i=0;
    string temp;
    
    do
    {
        cin >> temp;
        in.push_back(temp);
        in[i]=temp;
        i++;
        cout << "in[" <<i<< "] = " << in[i] << "  temp = " << temp << '\n';
        
    }
    while (in[i]!="quit");
}
/*struct a
{
    int date;
    int date2;
};
*/

int main ()
{    
    f2();
    
    return 0;
}


Добавлено через 9 минут и 58 секунд
Сам разобрался. 

      
Код

i++;
cout << "in[" <<i<< "] = " << in[i] << "  temp = " << temp << '\n';


нужно было поменять на 
Код

cout << "in[" <<i<< "] = " << in[i] << "  temp = " << temp << '\n';
i++;



PM MAIL   Вверх
bsa
Дата 8.3.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Данная последовательность команд:
Код
std::string str;
std::cin >> str;
Считает тебе только одно слово.
Чтобы читать строку, нужно делать так:
Код
std::string str;
std::getline(std::cin, str);

Чтобы запихать значение в вектор достаточно только вызова метода in.push_back(temp), а in[i] = temp - лишняя операция.
PM   Вверх
v_123
Дата 8.3.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо.
bsa
Код

in.push_back(temp); 

на самом деле в коде был 
Код

// in.push_back(temp);

т.к он почему то не работает, т.е

Код

cout << in[i]; 

ничего не выводит. 
Не подскажите почему?




Это сообщение отредактировал(а) v_123 - 9.3.2008, 16:42
PM MAIL   Вверх
bsa
Дата 8.3.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
#include <vector>
#include <string>
#include <iostream>

typedef std::vector<std::string> StringVector;

int main()
{
    StringVector vec;
    //загрузка из стандартного ввода
    while(std::cin.good()) {
        std::string str;
        std::getline(std::cin, str);
        if (str == "quit")
            break;
        vec.push_back(str);
        //std::cout << vec.back() << std::endl; //отладочный вывод
    }

    //последовательный перебор всех элементов вектора
    for(StringVector::const_iterator i = vec.begin(), end = vec.end(); i != end; ++i)
        std::cout << *i << std::endl; //и вывод на консоль
    return 0;
}

PM   Вверх
korian
Дата 8.3.2008, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

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



комменты:

Код

using namespace std; //хреновый стиль однако...

string buf;
vector <string> in(10); //создание вектора с 10-ю пустыми (значение "") элементами.
int i=0;

void f2()
{
    int i=0;
    string temp;
    
    do
    {
        cin >> temp;
        in.push_back(temp); //добавление НОВОГО элемента в КОНЕЦ массива (т.е. в вашем случае in[i+10] == temp)
        in[i]=temp; //ну тут одна из строк лишняя, вы, как я понял, в курсе
        i++; //ну тут понятно, местами поменяли...
        cout << "in[" <<i<< "] = " << in[i] << "  temp = " << temp << '\n';
        
    }
    while (in[i]!="quit");
}
int main ()
{    
    f2();
    
    return 0;
}


и зачем стока лишнего кода? неужели так трудно поудалять лишнее?
чтоб людям читающим это было удобней и быстрее найти ошибку

bsa, можна сказать написал идеальный вариант, как это должно быть.
PM   Вверх
v_123
Дата 9.3.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Почему после: 

 
Код

        сin >> temp;
        in.push_back(temp);

        
cout <<  in[i];  ничего не выводит 

а после:

   
Код

       сin >> temp;
       in[i]=temp;
   


все в порядке


PM MAIL   Вверх
bsa
Дата 9.3.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(v_123 @ 9.3.2008,  16:33)
Почему после: 

 
Код

        сin >> temp;
        in.push_back(temp);

        
cout <<  in[i];  ничего не выводит 

а после:

   
Код

       сin >> temp;
       in[i]=temp;
   


все в порядке

Попробуй так:
Код
cin >> temp;
in.push_back(temp);
cout << in[in.size()-1] << endl; //или, что тоже самое: in.back()
Надеюсь, догадаешься почему так, работает.  smile 
PM   Вверх
v_123
Дата 9.3.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Догадался. Спасибо.

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

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

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

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

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


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

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


 




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


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

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