Я почти уверен, что этот вопрос задал вопрос, но после долгого поиска я до сих пор не могу найти ответ. Я извлек этот фрагмент кода из Accelerated C++, и у меня возникла проблема с завершением цикла while
. Код здесь:Завершение цикла while (cin >> s). Ускоренный C++
#include <iostream>
#include <vector>
using namespace std;
istream& read(istream& in, vector<double>& vec)
{
cout << "start reading" << endl;
if (in) {
vec.clear();
double x;
while (in >> x) {
cout << "x=" << x << endl;
vec.push_back(x);
}
in.clear();
}
cout << "end reading" << endl;
return in;
}
int main() {
vector<double> vec;
read(cin, vec);
return 0;
}
I вход 1 2 3 4 5
тип EOF (Ctrl-D на MacOS) программа не завершается. Я могу продолжить ввод значений в вектор:
start reading
1 2 3 4 5 x=1
x=2
x=3
x=4
x=5
5
x=5
6
x=6
7
x=7
Ближайший вопрос, который я нашел здесь: http://www.cplusplus.com/forum/beginner/49993/
Оканчивается ли это, когда stdin поступает из файла (как в 'mypog
regular
Только что проверено. Да. – desa
Кроме того, есть проблема с вашим кодом: только 'cout' находится внутри цикла while,' vec.push' находится за пределами цикла, хотя отступ указывает, что вы намеревались, чтобы он находился внутри цикла (где должен быть). Используйте фигурные скобки вокруг двух линий. – regular