我需要一些代码帮助。
我需要将这些信息从另一个文件中提取到我的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; }
希望你能解决它并感谢你的帮助
答案 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。)