[英]Ifstream in c++
我需要一些代碼幫助。
我需要將此信息從另一個文件帶到我的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)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.