虽然循环变得总是真正的c ++

时间:2017-12-16 13:37:05

标签: c++ while-loop getline

我有这个功能,需要几小时和几分钟的输入。如果分隔符不是冒号而应该给出错误。如果小时大于23且分钟大于59,则相同。使用我当前的循环,while bool似乎总是正确的。我做错了什么?看不到任何我可能改变的东西。

int delaString(string &samtalStart, int &timmarStart, int &minuterStart) {
        istringstream is(samtalStart);
        char colon;
        getline(cin, samtalStart);
        is >> timmarStart >> colon >> minuterStart;
        while (colon != ':' || timmarStart > 23 || minuterStart > 59) {
            cout << "Inkorrekt inmatning, var vänligen skriv in en timme mellan 00-23 och minuter mellan  0-59 i formatet tt:mm.\n" << endl;
            getline(cin, samtalStart);
        }
        // is >> timmarStart >> colon >> minuterStart;

     return(timmarStart, minuterStart);
}

1 个答案:

答案 0 :(得分:1)

在函数中设置冒号的值一次然后进入无限循环解决方案就是在while循环中使用stringstream:

int delaString(string &samtalStart, int &timmarStart, int &minuterStart) {

        char colon;
        getline(cin, samtalStart);
        istringstream is(samtalStart);
        is >> timmarStart >> colon >> minuterStart;
        while (colon != ':' || timmarStart > 23 || minuterStart > 59) {
            cout << "Inkorrekt inmatning, var vänligen skriv in en timme mellan 00-23 och minuter mellan  0-59 i formatet tt:mm.\n" << endl;
            getline(cin, samtalStart);
            istringstream iss(samtalStart);
            iss >> timarStart >> colon >> minuterStart;
        }
        // is >> timmarStart >> colon >> minuterStart;

     return(timmarStart, minuterStart);
}

希望这有帮助