큰 QStringList에서 목록을 작성하는 프로그램에서 작업하고 있습니다. 따라서 기본적으로 문자열 일치 후 while 루프는 다음 문자열을 목록에 추가하기 시작합니다. 이 부분은 잘 작동합니다. 내가 가진 유일한 문제는 EOF 메커니즘을 어떻게 추가해야할지 모르므로 프로그램이 예기치 않게 종료된다는 것입니다. 더 자세한 코드EOF (Qt)까지 while 루프 계속
업데이트 내 코드에 대한 충분한 세부 사항을 제공하지 않는
죄송합니다. 이것이 내 코드가 지금 보이는 모습입니다. 따라서 처음으로 "PACKAGE TYPE"문자열이 감지 된 후 함수 storeLines()
을 사용하여 다음 문자열을 세 가지 목록 중 하나에 저장합니다. 그리고 이것은 다음 "패키지 유형"일치 또는 EOF 때까지 계속됩니다. 올바르게 작동하지 않는 유일한 이유는 반복기가 QStringList의 마지막 문자열에있을 때뿐입니다. 그것은 어떻게 든 다음 사전에 inputline.end()
void storeLines(QString department, QStringList::iterator current_line, QStringList::iterator endline){
while(QString::compare(*(current_line + 1),"PACKAGE TYPE") && (++current_line != endline)){ //this is not working
if(!QString::compare(department, "MDA")) mda_list.push_back(*current_line);
else if(!QString::compare(department, "SDA")) sda_list.push_back(*current_line);
else mix_list.push_back(*current_line);
}
}
void void MainWindow::on_pushButton_clicked(){
QString input = ui->listinput->toPlainText().toLatin1();
QStringList inputline = input.split("\n", QString::SkipEmptyParts);
for(QStringList::iterator pkg_header(inputline.begin()); pkg_header != inputline.end(); ++pkg_header){
if(!QString::compare(*pkg_header,"PACKAGE TYPE")){
++pkg_header;
if(!QString::compare(*pkg_header,"Department-mda:")) storeLines("MDA", pkg_header, inputline.end());
else if(!QString::compare(*pkg_header,"Department-sda:")) storeLines("SDA", pkg_header, inputline.end());
else storeLines("MIX", pkg_header, inputline.end());
}
}
}
감사 것을 감지하지 않습니다!
'for' 루프는 정지 조건을 쓰는 방법을 알고 있지만 while 루프는 쓰지 않는 것을 알고 있습니까? 물론 두 곳에서 같은 수표를 사용해야합니다. –
@IgorTandetnik 코드를 단순화했습니다. 실제로 'while'루프는 다른 함수에서 수행됩니다. 'inputline.end()'를 매개 변수로 추가하려고 시도했지만 작동하지 않았습니다. – Mrchacha
글쎄, 당신은 그것을 작동시켜야 할 것입니다. end iterator *를 비교하는 것은 범위의 끝을 감지하는 방법입니다. 'NULL '과 비교하려는 시도는 말도 안됩니다. –