У меня есть пара проблем, которые, как мне кажется, тесно связаны, но я не смог их исправить после того, что я ранее нашел на веб-сайте.
Мои проблемы связаны с двойным использованием cin
в моей основной функции. Мне нужно читать числа с клавиатуры, чтобы либо строить небольшие векторы, либо хранить отдельные коэффициенты. Я не могу знать заранее длину векторов, которые собираюсь построить.
Вот задействованные строки:
#include <vector>
#include <iostream>
#include <limits>
int main() {
...
double a=0;
std::vector<double> coefficients;
while (std::cin>>a) {
coefficients.push_back(a);
}
...
std::vector<double> interval;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
while(std::cin>>a) {
interval.push_back(a);
}
std::cout<<interval.size()<<std::endl;
std::cout<<*interval.cbegin()<<" "<<*(interval.cend()-1)<<std::endl;
...
}
Я использую как macOS с g++ 6.3.0, так и Linux с g++ 5.3.0. Компилятору я отправляю флаги -Wall -std=c++14 -o
.
На машине с macOS второй cin полностью пропускается, а на машине с Linux второй процесс чтения ведет себя не так, как ожидалось. Я имею в виду, что если я дам -1 1
во втором cin
, напечатанный размер вектора будет равен 0 и, очевидно, программа остановится из-за ошибки сегментации.
На каждом cin
я ввожу запрошенные числа в одну строку, например 1 0 0 1
, затем нажимаю ввод, а затем ctrl+D.
Заранее спасибо всем! :)
getline
? - person molbdnilo   schedule 30.01.2017cin.ignore
, позволяет моему коду работать, как и ожидалось, на машине с Linux. Однако это не относится к macOS. Значит, я должен отказаться отcin
раз и навсегда? - person Sandro   schedule 30.01.2017