为什么一旦不满足条件,这个做同时循环就不会爆发?
Why won't this do-while loop break out once the condition is not met?
怎么了,我正在做的这个大项目又出问题了。
这个项目是为学校设计的,但这不是全部。有关该项目的更多信息,请参阅此处。
所以我必须以以下格式接受用户的输入:
p 11:45 12:15
它总是以p
或s
开头,并且在电话中有两次通话。这个重要的想法是比较手机套餐,考虑到白天的通话时间和晚上的通话时间等。
现在我很难接受输入。每次我运行程序时,它都不关心我是否以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++异常。
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 在基于范围的for循环中使用结构化绑定声明
- 用于C++中带有数组和指针的循环
- 循环中的随机函数
- 而使用 getline() 的循环没有爆发
- 为什么一旦不满足条件,这个做同时循环就不会爆发?