2015-10-01 1 views
1

Я пытаюсь читать ввод пользователя одним словом за раз, пока пользователь не печатает. В настоящее время это работает при чтении, пока не будет нажата клавиша ввода, но одновременно читает только один символ. Любые предложения о том, как читать слово вместо этого?C++ - Чтение ввода одним словом за один раз

#include<iostream> 
#include<string.h> 
using namespace std; 

int main(){ 

    char a[256]; 
    int i=0; 

    do{ 
     cin>>a[i++]; 
    } while(cin.peek() != '\n'); 

    for(int j= 0 ; j < i ; j++) 
     cout<< a[j] << " "; 
    return 0; 
} 
+0

комбинатом 'станд :: getline' с' станд :: string' и разметить строку. Лучше, чем иметь дело с переполнением буфера. – vsoftco

+1

Возможно, вы захотите изменить вопрос. 'cin' не даст вам никакого ввода, пока ПОСЛЕ того, как пользователь не наткнется на вход. – user4581301

ответ

1

Вы можете попробовать использовать

std::string a[256]; 

вместо

char a[256]; 

Тем не менее, логика использования

while(cin.peek() != '\n'); 

испорчено. Если вы вводите пробел перед нажатием Введите, ваша программа будет ждать ввода большего количества ввода.

Лучше использовать std::getline(), чтобы прочитать строку текста, а затем проанализировать текст с помощью stringstream.

Я также собираюсь предложить использовать std::vector<std::string> вместо массива std::string.

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

int main() 
{ 
    std::vector<std::string> words; 

    std::string line; 
    getline(std::cin, line); 

    std::istringstream str(line); 
    std::string word; 
    while (str >> word) 
    { 
     words.push_back(word); 
    } 

    for (auto& w : words) 
    { 
     std::cout << w << " "; 
    } 

    return 0; 
} 
0

Вот еще один компактный способ делать это с помощью getline и контейнер std::string сек

#include <iostream> 
#include <iterator> 
#include <algorithm> 
#include <string> 

int main() 
{ 
    std::vector<std::string> tokens; 
    std::copy(std::istream_iterator<std::string> {std::cin}, {}, 
       std::back_inserter(tokens)); 
    for(auto && elem: tokens) 
     std::cout << elem << '\n'; 
}