簡體   English   中英

為什么此for循環不執行?

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

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