|
对于原始的代码,我试验出了两种解决方法,首先是看似没道理的再清一次stdin
- #include <iostream>
- #include <vector>
- using namespace std;
- int main(int argc, const char * argv[])
- {
- vector<int> vec;
- while (cin)
- {
- int ls;
- cin>>ls;
- vec.push_back(ls);
- }
- cin.clear();
- clearerr(stdin);
- if (cin)
- {
- cout<<"Good cin!"<<endl;
- }
- int a;
- cin>>a;
- cout<<a<<endl;
- cout << "Hello, World!\n";
- return 0;
- }
复制代码
然后我想,会不会是实现上有个bug,stdin标记着EOF,后面一同步,然后非EOF状态的std::cin也变成EOF了,然后就试了一下关掉同步……
- #include <iostream>
- #include <vector>
- #include <ios>
- using namespace std;
- int main(int argc, const char * argv[])
- {
- ios_base::sync_with_stdio(false);
- vector<int> vec;
- while (cin)
- {
- int ls;
- cin>>ls;
- vec.push_back(ls);
- }
- cin.clear();
- if (cin)
- {
- cout<<"Good cin!"<<endl;
- }
- int a;
- cin>>a;
- cout<<a<<endl;
- cout << "Hello, World!\n";
- return 0;
- }
复制代码
居然也能解决……orz
不知道是libc++实现上的问题还是设计上的鸟问题…… |
|