簡體   English   中英

C ++中的Ifstream

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM