一旦条件不满足,为什么这个do-while循环不会爆发?

时间:2011-10-10 23:51:04

标签: c++ do-while

怎么了,我正在处理这个正在进行的这个大项目的另一个问题。

该项目是为了学校,但这不是整个项目。有关该项目的更多信息,请查看here

所以我必须以下列格式从用户那里获取输入:

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);

2 个答案:

答案 0 :(得分:0)

您的代码(通过几个调整来编译)对我来说很好。你可以发布你发送给它的输入导致程序失败吗?

答案 1 :(得分:0)

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

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

或者你可以在开始循环之前调用cin.exceptions ( ifstream::failbit | ifstream::badbit )。如果出现任何问题,这将启用从流输入函数抛出的C ++异常。