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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> std::cin >> 
V
    Опции темы
Bogdan1024
  Дата 22.9.2007, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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

    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()?


--------------------
user posted image
PM MAIL   Вверх
DjoNIK
Дата 22.9.2007, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Перед вводом в поток нужно установить флаг игнорирования специальных символов

Цитата

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

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


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
archimed7592
Дата 22.9.2007, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Bogdan1024, используй cin.getline(...).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
comcon1
Дата 22.9.2007, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

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



вот рабочий код.
Код

    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;
    }



--------------------
PM MAIL   Вверх
Skladnoy
Дата 22.9.2007, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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;
}


PM MAIL   Вверх
Bogdan1024
Дата 22.9.2007, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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

Это сообщение отредактировал(а) Bogdan1024 - 22.9.2007, 23:43


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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