Ifstream in c++

Ifstream in c++

本文关键字:c++ in Ifstream      更新时间:2023-10-16

我需要一些代码方面的帮助。

我需要将此信息从另一个文件带到我的 c++ 代码中,最后一个文件就像这样:

Human:3137161264 46

这就是我为它写的,它正确地使用了"人类"这个词,但它采用了随机数,而不是我刚刚写的文件上的数字:

struct TSpecie {
string id;
int sizeGen;
int numCs; };

__

TSpecie readFile(string file){
TSpecie a;
ifstream in(file);
if (in){
    getline(in,a.id,':');
    in >> a.sizeGen;
    in >> a.numCs;
}
else
    cout << "File not found";
return a; }

希望你能解决它,感谢您的帮助

3137161264会导致整数溢出,从而导致未定义的行为

因此,对于这种情况unsigned int sizeGen就足够了,但也要考虑long long (unsigned) int sizeGen

编辑 1:正如@nwp在问题评论中指出的那样,您还可以检查您的流是否发生任何错误:

//read something and then 
if (!in) { 
    // error occured during last reading 
}

始终测试从流读取输入是否成功:

if (std::getline(in, a.id, ':') >> a.sizeGen >> a.NumCs) {
   // ...
}

很可能输入刚刚失败。例如,第一个数字可能无法成功读取。另请注意,std::getline()是一个未格式化的输入函数,即它不会跳过前导空格。例如,最后一个数字读取后的换行符仍在流中(至少,由于您对std::getline()的使用在冒号上结束,它只会创建一个奇数 ID(。