Основная идея кода должна быть такой:
std::string line;
double p1, p2, p3;
std::string more;
while (std::getline(in, line)) {
std::istringstream iss{line};
if (iss >> p1 >> p2 >> p3 && !(iss >> more)) {
std::printf("p1=%f, p2=%f, p3=%f\n", p1, p2, p3);
} else {
std::printf("invalid line: %s\n", line.c_str());
}
}
В простых словах код говорит: строка допустима, если она содержит три числа и ничего более.
C ++ puristsскажет, что я не должен использовать printf в C ++, но мне нравится разделение между форматированием и фактическими данными.