2013-06-05 2 views
0

Я пытаюсь решить это условие, когда пользователю нужно ввести число n. и затем вводит n номеров после него в одной строке. Поэтому моя программа должна знать это число n до того, как пользователь будет продолжать вводить, чтобы программы знали, насколько большой из динамических массивов необходимо сохранить эти числа, введенные после n. (Очень важно, чтобы все это происходило на одной линии).Получение пользовательского ввода при нажатии пробела

Я пробовал следующее, но он не работает.

int r; 
cin >> r; 

//CL is a member function of a certain class 
CL.R = r; 
CL.create(r); //this is a member function creates the needed dynamic arrays E and F used bellow 

int u, v; 
for (int j = 0; j < r; j++) 
{ 
    cin >> u >> v; 
    CL.E[j] = u; 
    CL.F[j] = v; 
} 
+0

Возможно, вы должны использовать 'std :: vector', но в остальном это решение для синтаксического анализа отлично подходит для меня. Что именно не работает? – Suedocode

+0

Почему вы хотите, чтобы пользователь выделил номер с пробелом вместо ввода? Моя клавиатура включает в себя клавишу «Enter» на цифровой клавиатуре. –

ответ

2

Вы можете сделать это, как обычно, на одной строке:

#include <string> 
#include <sstream> 
#include <iostream> 
#include <limits> 

using namespace std; 

int main() 
{ 
    int *array; 
    string line; 
    getline(cin,line); //read the entire line 
    int size; 
    istringstream iss(line); 
    if (!(iss >> size)) 
    { 
    //error, user did not input a proper size 
    } 
    else 
    { 
    //be sure to check that size > 0 
    array = new int[size]; 
    for (int count = 0 ; count < size ; count++) 
    { 
     //we put each input in the array 
     if (!(iss >> array[count])) 
     { 
     //this input was not an integer, we reset the stream to a good state and ignore the input 
     iss.clear(); 
     iss.ignore(numeric_limits<streamsize>::max(),' '); 
     } 
    } 
    cout << "Array contains:" << endl; 
    for (int i = 0 ; i < size ; i++) 
    { 
     cout << array[i] << ' ' << flush; 
    } 
    delete[] (array); 
    } 
} 

А вот demonstration, вы можете увидеть, что вход одна линия 6 1 2 3 4 5 6.

Еще раз, я сделал не проверить все, так что позаботьтесь о том, как вам нужно.

Редактировать: добавлен сброс потока после плохого чтения.

+0

Очень красивый и чистый. – PSyLoCKe

+0

Я вижу 'использование пространства имен std', но я не вижу' vector ';) –

+1

Если OP хочет решение с' vectors', я был бы рад предоставить его, но я думаю, что это выглядит как упражнение для понимания динамического так что это не будет разрешено. – Djon

Смежные вопросы