2012-10-08 5 views
1

Пожалуйста, посмотрите на следующий кодЧтение строки целых чисел в вектор

int main() 
{ 
    cout << "Enter numbers (-1 to stop entering; -2 to exit)" << endl; 

    while(cin>>enterNumber) 
    { 
    numbers.push_back(enterNumber); 
    } 


    for(size_t size=0;size<numbers.size();size++) 
    { 
     cout << numbers[size] << endl; 
    } 
} 

То, что я пытаюсь сделать здесь что-то вроде этого

  1. Тип списка номеров (например: 1 2 3 4 5 6 7 8 9 0 11)
  2. Читать все из них в вектор
  3. печатать их

Здесь, когда я попал в дверь, ничего не происходит! Похоже, петли не выходили. Как печатать значения, когда я нажимаю кнопку ввода?

UPDATE

Я редактировал код, как советует даны в ответах.

int main() 
{ 
    cout << "Enter numbers (-1 to stop entering; -2 to exit)" << endl; 

    std::string line; 
getline(std::cin, line); 
std::istringstream iss(line); 
while (iss >> enterNumber) 
{ 
    numbers.push_back(enterNumber); 
} 


    for(size_t size=0;size<numbers.size();size++) 
    { 
     cout << numbers[size] << endl; 
    } 
} 

но дает другую ошибку Теперь

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
make[1]: Entering directory `/cygdrive/c/Users/yohan/Documents/NetBeansProjects/Excersice 6' 
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin-Windows/excersice_6.exe 
make[2]: Entering directory `/cygdrive/c/Users/yohan/Documents/NetBeansProjects/Excersice 6' 
mkdir -p build/Debug/Cygwin-Windows 
rm -f build/Debug/Cygwin-Windows/Multiple.o.d 
g++ -c -g -MMD -MP -MF build/Debug/Cygwin-Windows/Multiple.o.d -o build/Debug/Cygwin-Windows/Multiple.o Multiple.cpp 
Multiple.cpp: In function `int main()': 
Multiple.cpp:22: error: variable `std::istringstream iss' has initializer but incomplete type 
Multiple.cpp:60:3: warning: no newline at end of file 
make[2]: *** [build/Debug/Cygwin-Windows/Multiple.o] Error 1 
make[1]: *** [.build-conf] Error 2 
make: *** [.build-impl] Error 2 
nbproject/Makefile-Debug.mk:78: recipe for target `build/Debug/Cygwin-Windows/Multiple.o' failed 
make[2]: Leaving directory `/cygdrive/c/Users/yohan/Documents/NetBeansProjects/Excersice 6' 
nbproject/Makefile-Debug.mk:61: recipe for target `.build-conf' failed 
make[1]: Leaving directory `/cygdrive/c/Users/yohan/Documents/NetBeansProjects/Excersice 6' 
nbproject/Makefile-impl.mk:39: recipe for target `.build-impl' failed 


BUILD FAILED (exit value 2, total time: 1s) 
+1

Ввод - это просто пробел. Введите EOF или что-то недействительное. Еще лучше, если вы уже делаете это так, используйте 'std :: copy' для копирования входов в вектор. Включение ваших специальных входов потребует больше работы, чем просто 'while (cin >> ...)'. – chris

ответ

7

считывает строку из CIN в строку, используя getline. Затем поместите эту строку в istringstream. Затем прочитайте с этого istringstream вместо того, где вы используете cin.

std::string line; 
getline(std::cin, line); 
std::istringstream iss(line); 
while (iss >> enterNumber) 
{ 
    numbers.push_back(enterNumber); 
} 
+0

Большое спасибо за ответ. Но он дает ошибку «Multiple.cpp: 22: ошибка: переменная' std :: istringstream iss »имеет инициализатор, но неполный тип« –

+0

@Sepala: '#include ' –

+0

wow..Great! Большое спасибо! –

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