簡體   English   中英

Qt循環崩潰

[英]Qt Cycle Crashes

我用Qt制作了一個方法(SLOT),當我吃掉這個自寫的代碼時崩潰了。

我真的找不到錯誤。 我希望它在循環中某處,或者也許有一些秘密信號。

QString data_elements[13];
    QString fileName = "C:\\Users\\cp1000\\Documents\\msl_register\\data.csv";
    QFile inputFile(fileName);
    if (inputFile.open(QIODevice::ReadOnly))
    {
        QTextStream in(&inputFile);
        int elementId = 0;
        while (!in.atEnd())
        {
            for(int i = 0; i < 13; i++){
                data_elements[i] = "";
            }
            QString line = in.readLine();
            for(int i = 0; i < line.length(); i++)
            {
                if(line[i] == ","){
                    elementId++;
                    i++;
                }
                if(line[i] == "\n"){
                    elementId = 0;
                }
                data_elements[elementId] = data_elements[elementId] + line[i];
            }
        }
        inputFile.close();
    }

它從data.csv文件中獲取數據,看起來像這樣。 Calc中的data.csv

我的任務是:在data.csv中獲取並查找行的Make方法,然后在GUI中打印。

我的data.csv文件。

Reference,Batch,MSL,Open Date,Open Time,Close Date,Close Time,Drying start date,Drying start time,Spent,Left,Status
0028027,1231,1,07/12/2016,10:13,08/12/2016,15:41,13/12/2015,15:41,0,Neierobeюots,1
0028028,123123,1,07/12/2016,10:37,08/12/2016,15:45,13/12/2016,10:24,0,Neierobeюots,2
0028028,55554444,1,31/01/2017,15:26,08/12/2016,10:19,08/12/2016,15:41,0,Neierobeюots,2
XC0182,456,1,07/12/2016,09:27,08/12/2016,09:37,08/12/2016,15:41,0,Neierobeюots,3
VD0057-MSD,5999,5,15/12/2016,15:28,08/12/2016,13:33,13/12/2016,11:33,0,72,3
XC0182,555444555,1,07/12/2016,13:38,08/12/2016,13:38,08/12/2016,15:41,0,Neierobeюots,1
0028028,1232,2a,07/12/2016,10:14,08/12/2016,15:42,13/12/2016,15:42,1,Neierobeюots,2
0028029,123124,2a,07/12/2016,10:38,08/12/2016,15:46,13/12/2017,10:25,1,Neierobeюots,3
0028029,55554445,3,07/12/2016,10:20,08/12/2016,10:20,19/12/2016,12:52,1,Neierobeюots,3
XC0183,457,2,07/12/2016,09:28,08/12/2016,09:38,08/12/2017,15:42,1,Neierobeюots,4
VD0058-MSD,6000,4,07/12/2016,11:34,08/12/2016,13:34,13/12/2017,11:34,1,73,3
XC0183,555444556,2,07/12/2016,13:39,08/12/2016,13:39,08/12/2017,15:42,1,Neierobeюots,2
154-199-00-011,544325145,3,31/01/2017,13:58,31/01/2017,13:57,0,0,0,168,2
154-199-00-011,7777,3,31/01/2017,14:05,31/01/2017,14:05,0,0,0,168,1

您超出了數組范圍:

data_elements[elementId] = data_elements[elementId] + line[i];

發生這種情況是因為在字符串的結尾line不包含\\n ,並且在elementId位置永不將elementId重置為0

if(line[i] == "\n"){
  elementId = 0;    // <-- This code never reached
}

QTextStream::readLine文檔說:

返回的行沒有尾隨行尾字符(“ \\ n”或“ \\ r \\ n”)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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