我有几个问题,我认为它们是紧密相连的,但是我无法按照我以前在网站上找到的方式修复它们。第二个cin被跳过或不能正常工作
我的问题与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上,第二个读取过程的行为并不像预期的那样。我的意思是如果我在第二个cin
处给出-1 1
,则打印的矢量大小为0,很明显,程序因分段错误而停止。
在每个cin
我在一行中输入所需的数字,如1 0 0 1
,然后按enter键,然后按Ctrl + D.
在此先感谢所有! :)
你有没有考虑使用'getline'呢? – molbdnilo
是的,我做到了,除了'cin.ignore'这行外,我的代码可以在Linux机器上按预期运行。但是,macOS的情况并非如此。 那么,我应该永远放弃'cin'? – Sandro