我目前正在模擬進程調度器。該代碼讀取假過程的文本文件,並且我需要能夠解析該文件。文本文件的格式如下所示。C++:istringstream循環兩次
Pid Bst Arr Pri Dline I/O
1 1 850 61 852 3
2 15 3980 82 3998 2
3 83 8095 51 8179 0
4 96 7262 66 7365 0
5 100 6529 1 6630 0
6 58 9068 24 9132 0
7 9 5148 35 5166 4
8 -8 5924 3 5925 0
9 100 -1 34 101 0
10 72 1918 43 -5 0
爲了做到這一點,在尋找一些關於這方面的最佳方法的建議之後,我決定使用istringstream。代碼如下。
int parseProcessFile(String filename){
std::ifstream infile(filename);
std::string line;
while (std::getline(infile, line)){
std::istringstream iss(line);
int pid, bst, arr, pri, dline, io;
if (!(infile >> pid >> bst >> arr >> pri >> dline >> io) || (pid < 0 || bst < 0 || arr < 0 || pri < 0 || dline < 0 || io < 0)) {
//do nothing, as this line won't read in appropriately
} // error
printf("%d | %d | %d | %d | %d \n", pid, bst, arr, pri, dline, io);
// save process details
}
return 1;
}
長,如果只是簡單地檢查了正確的輸入(沒有非整數,無外乎0)
出於某種原因,跑的時候,它是通過循環徹底兩次,打印出的一切,是一條正確的路線。誰能向我解釋爲什麼會發生這種情況?
如果您使用的是其他所有流,爲什麼突然切換到'printf'輸出? –
'!(infile >>'是一個錯字嗎?你爲什麼不讀取你所創建的字串流中的那些? – bstamour