Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 故障后的istream读数_C++_Istream - Fatal编程技术网

C++ 故障后的istream读数

C++ 故障后的istream读数,c++,istream,C++,Istream,我有一小段代码来读取用户数据,如下所示: #include<iostream> #include<vector> #include<algorithm> #include<ios> #include<iomanip> #include<string> using namespace std; istream& read_dt(istream& in, vector<int>& nmbr

我有一小段代码来读取用户数据,如下所示:

#include<iostream>
#include<vector>
#include<algorithm>
#include<ios>
#include<iomanip>
#include<string>

using namespace std;

istream& read_dt(istream& in, vector<int>& nmbr) {
if(in) {
 nmbr.clear();

 int x;
  while(in >> x) {
   nmbr.push_back(x);
  }
  if(in.fail()) {
   string s;
   in >> s;
   in.clear();
  }
 }
 return in;
}

int main() {
 vector<int> data;
 cout << "Enter all the data: " << endl;
 read_dt(cin, data);
 cout << "Size: " << data.size() << endl;
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
istream&read_dt(istream&in,vector&nmbr){
如果(在){
nmbr.clear();
int x;
while(在>>x中){
nmbr.推回(x);
}
if(in.fail()){
字符串s;
在>>年代;
in.clear();
}
}
返回;
}
int main(){
矢量数据;

cout一旦流发生故障,流将保持失败状态(无法成功读取),直到您清除()流

现在,您正试图在清除流之前从流中读取坏数据,这样读取就永远不会成功。此外,在清除坏数据之后,您没有提供任何方法继续从流中读取数据——您执行while循环,然后当它退出时,您清除坏数据(如果有)从流中,然后返回您阅读的内容

对于这种情况,您几乎需要在流上与eof()分开进行测试,并继续读取,直到达到eof()--要么转换数据,要么忽略数据

如果您试图在下一个空格前忽略坏数据,我将使用
忽略
,而不是将数据读入字符串。将不关心的数据读入字符串没有实际意义

#include<iostream>
#include<vector>
#include<algorithm>
#include<ios>
#include<iomanip>

using namespace std;

istream& read_dt(istream& in, vector<int>& nmbr) {
    if (in) {
        nmbr.clear();

        int x;
        for(;;) { 
            in >> x;

            if (in.eof())
                break;

            if (in.fail()) {
                in.clear();
                in.ignore(100, ' ');
            }
            else
                nmbr.push_back(x);
        } 
        return in;
    }
}

int main() {
    vector<int> data;
    cout << "Enter all the data: " << endl;
    read_dt(cin, data);
    cout << "Size: " << data.size() << endl;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
istream&read_dt(istream&in,vector&nmbr){
如果(在){
nmbr.clear();
int x;
对于(;){
在>>x;
if(在.eof()中)
打破
if(in.fail()){
in.clear();
忽略(100,);
}
其他的
nmbr.推回(x);
} 
返回;
}
}
int main(){
矢量数据;

cout一旦流发生故障,流将保持失败状态(无法成功读取),直到您清除()流

现在,您正试图在清除流之前从流中读取坏数据,这样读取就永远不会成功。此外,在清除坏数据之后,您没有提供任何方法继续从流中读取数据——您执行while循环,然后当它退出时,您清除坏数据(如果有)从流中,然后返回您阅读的内容

对于这种情况,您几乎需要在流上与eof()分开进行测试,并继续读取,直到达到eof()--要么转换数据,要么忽略数据

如果您试图在下一个空格前忽略坏数据,我将使用
忽略
,而不是将数据读入字符串。将不关心的数据读入字符串没有实际意义

#include<iostream>
#include<vector>
#include<algorithm>
#include<ios>
#include<iomanip>

using namespace std;

istream& read_dt(istream& in, vector<int>& nmbr) {
    if (in) {
        nmbr.clear();

        int x;
        for(;;) { 
            in >> x;

            if (in.eof())
                break;

            if (in.fail()) {
                in.clear();
                in.ignore(100, ' ');
            }
            else
                nmbr.push_back(x);
        } 
        return in;
    }
}

int main() {
    vector<int> data;
    cout << "Enter all the data: " << endl;
    read_dt(cin, data);
    cout << "Size: " << data.size() << endl;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
istream&read_dt(istream&in,vector&nmbr){
如果(在){
nmbr.clear();
int x;
对于(;){
在>>x;
if(在.eof()中)
打破
if(in.fail()){
in.clear();
忽略(100,);
}
其他的
nmbr.推回(x);
} 
返回;
}
}
int main(){
矢量数据;

我看不出你在while中包含if语句的位置。这就是你想做的,对吗?我看不出你在while中包含if语句的位置。这就是你想做的,对吗?