Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > std::cin >>


Автор: Bogdan1024 22.9.2007, 01:39
Нужно считать в консоли строку из нескольких слов, разделённых пробелами. Пишу такое:
Код

    const int n = 3;
    const int m = 10;
    char buffer[n][m];
    for (int i = 0; i < n; i++) // Вводим слова
    {
        std::cout << "Input string #" << i << std::endl;
        std::cin >> std::setw(m) >> buffer[i]; 
        //std::cin.getline(buffer[i], m); - работает так же само
    }

Отлично работает если слово одно, а вот если слова два, то строка разбивается на две с одним словом в каждой и в итоге вместо buffer[0] == "Первоеслово Второеслово" получаем buffer[0] == "Первоеслово" и buffer[1] == "Второеслово"! Как такое возможно!? И как считать действительно строку?
При чём нужно использовать массив char, ибо стринги мы ещё по программе не проходили smile

Добавлено через 1 минуту и 50 секунд
Как это можно сделать не через _getch()?

Автор: DjoNIK 22.9.2007, 07:50
Перед вводом в поток нужно установить флаг игнорирования специальных символов

Цитата

Как это можно сделать не через _getch()? 

Я даже не знаю как можно сделать через него! smile

Автор: archimed7592 22.9.2007, 08:11
Bogdan1024, используй cin.getline(...).

Автор: comcon1 22.9.2007, 08:55
вот рабочий код.
Код

    const int m = 10;
    const int n = 3;
    char buffer[n][m], tmp[1000];
    for (int i=0; i<n; i++) {
       cout << "#" << i << ":";
       cin >> noskipws;
       cin.getline(tmp,1000,'\n');
       tmp[m] = '\0';
       strcpy(buffer[i], tmp);
       cin.clear();
       cout << "readed: " << buffer[i] << endl;
    }

Автор: Skladnoy 22.9.2007, 21:24
comcon1, 
Ну тогда уж

Код

#include <string>
#include <iostream>
#include <vector>

int main()
{
    std::vector<std::string> v;
    std::string s;
    while( std::getline(std::cin, s) ) {
        v.push_back(s):
        std::cout << s << "|\n";
    }
    return 0;
}


Автор: Bogdan1024 22.9.2007, 23:42
Цитата
Я даже не знаю как можно сделать через него! 
Читать по одному символу  smile 
comcon1, спасибо, твой код мне дико помог!
Skladnoy, увы, мы ещё stl не проходили. Но всё равно спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)