2016-04-12 3 views
0

у меня есть время цикла и код нижеВыход из цикла while, cin. с помощью Ctrl-Z/Ctrl-D не работает C++

string namn, word; 

while(getline(cin, namn)){ 
    istringstream iss(namn); 
    vector<string> v; 
    while(iss >> word){ 
     v.push_back(word); 
    } 
    for(auto elements: v){ 
     cout << elements << endl; 
    } 
} 
cout << "do something" <<endl; 

, когда я запускаю код цикл работает нормально, но я не могу выйти из цикла с помощью Ctrl-Z (в окна)

я также попытался это ниже:

int main(){ 
    string namn; 
    string pris; 
    string antal; 
    vector<string> v; 
    while(cin >> namn >> pris >> antal){ 
    v.push_back(namn); 
    v.push_back(pris); 
    v.push_back(antal); 
    } 
    // do something with the vector maybe print it 
    // i can not exit the loop and continue here 
    return 0; 

} 

я также попытался с третьим решением, но оно не работает либо:

int main(){ 
    string name; 
    vector<string> v; 

    while(!cin.eof()&& cin.good()){ 
    cin >> name; 
    v.push_back(name); 
    } 
    // after exiting the loop with ctrl-Z (in windows, ctrl-d in linux) 
    // do something with the vector, but it never goes here 


} 

Задача, которую я выполняю или собираюсь решить, заключается в том, что у вас есть несколько ввода на строке, например, имя, цена, сумма. то я собираюсь хранить эти элементы в векторе. выход должен быть с использованием ctrl-z, не набрав quit или что-то еще.

+0

Вы нажали клавишу ввода после ctrl-z? Попробуйте добавить разрыв, если namn.empty() выйдет из цикла с пустой строкой. –

ответ

0

По-видимому, std::basic_ios::operator bool() возвращает ли поток не сбой, и это не то же самое, что и !eof(). Вероятно, вам нужно изменить свое состояние на while(cin >> namn >> pris >> antal && !cin.eof()).

+0

Хм, я попробовал это выражение без везения, больше предложений? – Jim

0

i solvevd мой собственный вопрос, код включает som больше кода о назначении, которое я делаю, но с этим кодом ниже. проблема заключалась в том, что раньше я использовал istringstream и переключил его на stringstream istead, теперь ушел с ctrl-z/ctrl-d. :

Firstclass myclass; 
string item, data; 
vector<string> split_input; 

// reads in on line of string until ctrl-z/ctrl-d 
while(getline(cin, data)){ 
    stringstream str_stream(data); 
    // reading the values separate adding them to vector 
    while(str_stream >> item{ 
     split_input.push_back(item); 
    } 
    // if amount is not given 
    if(v.size() == 2){ 
     myclass.insert_data(split_input[0], stod(split_input[1]), 1.00); 
    } 
    // if if amount is given 
    else{ 
     myclass.insert_data(split_input[0], stod(split_input[1]), stod(split_input[2])); 
    } 
    // clearing the vector 
    split_input.clear(); 
} 
Смежные вопросы