[英]Why doesn't this for-loop execute?
我正在編寫一個用於練習的程序,該程序將從文件中讀取數據並將其格式化為可讀的格式。 到目前為止,我有一些代碼可以將標頭與其下的數據分開。 這里是:
int main() {
ifstream in("records.txt");
ofstream out("formatted_records.txt");
vector<string> temp;
vector<string> headers;
for (int i = 0; getline(in,temp[i]); ++i) {
static int k = -1;
if (str_isalpha(temp[i])) {
headers[++k] = temp[i];
temp.erase(temp.begin() + i);
}
else {
temp[i] += "," + headers[k];
}
}
}
( str_isalpha()
只是將isalpha()
應用於字符串中的每個字符的函數。)現在,該程序中的for循環不執行,我也不知道為什么。 有人知道嗎
編輯:按照建議,我將其更改為
string line;
for (int i = 0; getline(in,line); ++i) {
temp.push_back(line);
仍然完全跳過for循環。
vector<string> temp;
使向量為空 。 然后,當您嘗試讀入temp[0]
,這是未定義的行為。 您應該將一個單獨的string
變量(例如string foo;
作為getline
的第二個參數傳遞string foo;
在循環之前,然后是temp.push_back(foo);
作為循環主體中的第一條指令。
如果在確保您正在讀取有效的字符串引用之后循環仍未運行,則應檢查從中讀取的流是否有效。 例如,如果文件不存在或您沒有讀取權限,則該流將無效。 當流無效時, getline
不會讀取任何內容。 它的返回值是相同的流,並且轉換為bool
,其計算結果為false
。 在繼續之前,請檢查信息流的狀態。
ifstream in("records.txt");
if (!in.is_open()) {
std::cerr << "Uh-oh.\n";
return EXIT_FAILURE;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.