为什么一旦不满足条件,这个做同时循环就不会爆发?

Why won't this do-while loop break out once the condition is not met?

本文关键字:循环 爆发 不满足 条件 为什么      更新时间:2023-10-16

怎么了,我正在做的这个大项目又出问题了。

这个项目是为学校设计的,但这不是全部。有关该项目的更多信息,请参阅此处。

所以我必须以以下格式接受用户的输入:

p 11:45 12:15

它总是以ps开头,并且在电话中有两次通话。这个重要的想法是比较手机套餐,考虑到白天的通话时间和晚上的通话时间等。

现在我很难接受输入。每次我运行程序时,它都不关心我是否以s开始输入,只是继续等待更多的数据。令人沮丧的是,不久前它还在工作。

下面是我的代码:

string c;
string end = "s";
string start = "p";
int temp_start_hour;
int temp_start_min;
int temp_end_hour;
int temp_end_min;
char colon;
do {
    cin >> c;
    cout << c << endl;
    if (c != start && c != end)
    {
        cout << "ERROR IN INPUT" << endl;
        return 1;
    }
    if (c != end)
    {
        cin >> temp_start_hour >> colon >> temp_start_min;
        cin >> temp_end_hour >> colon >> temp_end_min;
        begin_hours[i] = temp_start_hour;
        begin_min[i] = temp_start_min;
        end_hours[i] = temp_end_hour;
        end_min[i] = temp_end_min;
    }
    i++;
} while (c != end);

您的代码(与一些调整,使其编译)对我来说工作得很好。你能发布你发送给它的导致程序失败的输入吗?

如果输入流进入错误状态,循环将永远不会结束。这是因为如果它处于错误状态,cin >> c中使用的任何变量都不会写入任何内容,c将永远保留其最后的值。

要解决这个问题,你应该使用while(cin)循环而不是do-while循环,或者在cin >> c之后检查if( cin.fail() )

或者您可以在开始循环之前调用cin.exceptions ( ifstream::failbit | ifstream::badbit )。如果出现任何错误,这将允许从流输入函数抛出c++异常。