Я решал некоторые упражнения, чтобы скоротать время, и я столкнулся с поведением, которое я не понимал, я собираюсь объяснить:
Упражнение:
НаписатьПрограмма, которая читает и сохраняет серию целых чисел, а затем вычисляет сумму первых N
целых чисел.Сначала попросите N
, затем прочитайте значения в вектор, затем вычислите сумму первых N
значений.
Поскольку я запросил N
в качестве второго шага:
Во втором std::cin
(std::cin >> values_to_compute
) он должен выйти из оператора while, чтобы продолжить программу, «возможно, только если» прочитанное не является двойным.Так что я могу напечатать, например;'k' или "как дела?"или Ctrl + Z (у меня Windows 10).
int main() {
try {
double holder {0};
std::vector<double> values;
while (std::cin >> holder) {
values.push_back(holder);
}
std::cin.clear();
std::cout << "Out of the loop, now entering to the other std::cin\n";
int values_to_compute {0};
std::cin >> values_to_compute;
std::cout << "Computing...\n";
double result_computed {0};
for (int i {0}; i < values_to_compute; ++i) {
result_computed += values[i];
}
std::cout << "Result computed " << result_computed << '\n';
system("pause");
return 0;
}
catch (std::runtime_error& e) {
std::cerr << e.what() << '\n';
system("pause");
return 1;
}
}
Хорошо, так?Итак ... std::cin
оставляет время в плохом () состоянии.Мне нужно позвонить std::cin.clear()
, чтобы снова использовать std::cin
.
Хорошо, а?Хорошо, если я наберу Ctrl + Z , чтобы выйти из цикла while
, std::cin.clear()
сработает;если я наберу что-то, что не Ctrl + Z , std::cin.clear()
не работает.
Я хочу знать причину такого поведения.