ifstream in c ++

时间:2017-02-03 10:23:55

标签: c++ ifstream

我需要一些代码帮助。

我需要将这些信息从另一个文件中提取到我的c ++代码中,最后一个是这样的:

Human:3137161264 46

这就是我为它写的,它需要" Human"正确,但它需要随机数,而不是我刚写的文件上写的那些:

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; }

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

2 个答案:

答案 0 :(得分:2)

3137161264导致整数溢出,导致未定义行为

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

编辑1:正如@nwp在您的问题的评论中所指出的,如果发生任何错误,您还可以检查您的信息流:

//read something and then 

if (!in) { 
    // error occured during last reading 
}

答案 1 :(得分:1)

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

SELECT TOP 1000 [Tagname]
  ,FORMAT((CASE WHEN 1 = ISDATE(CAST([Date] AS VARCHAR))THEN CAST(CAST([Date] AS VARCHAR)AS datetime) else NULL END ), 'yyyy-MM-dd HH:mm:ss.fff' ) AS [Date]
  ,[Value]
  ,[VValue]
  ,[OPCQuality]
  ,[QualityDetail]
  ,[QualityDescription]
  ,[StatusCode]
  ,[ErrorMessage] FROM [Dashboard].[dbo].[Data20170202123655985]

很可能输入失败了。例如,第一个数字可能无法成功读取。另请注意,if (std::getline(in, a.id, ':') >> a.sizeGen >> a.NumCs) { // ... } 无格式输入函数,即它不会跳过前导空格。例如,读取最后一个数字后的换行符仍然在流中(至少,因为您使用std::getline()结束冒号,它只会创建一个奇数ID。)