简单循环中C 程序中的错误
Bug in c++ program during a simple loop
我正在尝试尽可能少的代码行解决此问题。
问题语句:
有人设法向打招呼打招呼,如果可以从键入单词中删除几个字母,以便导致" Hello"一词...我正在测试他是否可以
#include <iostream>
int main() {
char c;
int i=0;
while(i!=5 && (cin>>c) && c!='n'){
if(c=="hello"[i])
i++;
}
cout<<((i==5)?"YES":"NO");
}
当应该打印"否"时,有一个错误。该程序等待更多输入。我认为循环直到i==5
才能完成,但是当c=='n'
。
在打包程序以最大程度地减少LOC之前(我认为您有一个很好的理由关心这一点,因为否则这是愚蠢的事情)使其正确!
尝试在CIN>> C测试之前对I!= 5测试。否则,当您获得" Hello"
时,您会阅读一个额外的角色编辑:要清楚,问题中的代码现已修改以包含此建议。
您有一个way loop
while(i!=5 && (cin>>c) && c!='n')
{ ... }
...您可以重写以更轻松的调试。通常,而不是任何循环...
while (X)
{ Y }
...您也可以写...
while (true)
{
if (!X) break;
Y
}
对于您的循环,那将是此代码:
while (true)
{
if (!(i!=5 && (cin>>c) && c!='n'))
break;
...
}
现在,我假设您知道逻辑和操作员的短路评估。如果没有,请搜索该术语!有了这些知识,您可以这样重写循环:
while (true)
{
if (!(i!=5))
break;
if (!(cin>>c))
break;
if (!(c!='n'))
break;
...
}
当然,您仍然可以简化一些双重否定,但是这个想法应该很清楚。现在,此更改使您可以在调试器中逐步浏览此问题,以分别评估每个循环出口条件。这很重要,因为第二个环条件也具有副作用!此外,您可以添加一些调试输出,以告诉您循环退出的原因。此外,对于具有副作用的检查,您可以检查中间状态(如果愿意,如果您愿意以这种方式输出状态),这将使您对问题的进一步见解。
最后,istreams
上的所有>>
运算符默认情况下,包括空格,选项卡和新线,因此您的最后一次检查永远不会导致循环退出。您可以告诉流不要跳过空格,如果那是您想要的。如何做到这一点应该很简单,可以使用另一个Websearch查找。;)
相关文章:
- 程序崩溃并显示"std::out_of_range"错误
- xmake总是报告:错误:无法获取cxx的程序,为什么
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 分段错误当我试图运行程序时出错
- 显示错误输出的简单数组排序程序
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 在气泡排序程序中未声明错误功能
- 我在c ++矩阵计算器程序中找不到错误
- 叮当格式化程序多行格式配置错误
- 全局向量导致 C++ 程序结束时出现段错误
- 运行时间错误:程序跳过提示,以获取第二名和第三个名称
- Glibc 2.7 配置错误程序太旧
- 运行时错误:程序已停止响应
- OpenCV for Android:在 PATH 中找不到错误程序"sh"
- C++中的 scanf 错误 - 程序没有响应
- c++语法错误:程序以非零状态退出
- 运行时错误C++程序:检测到glibc,munmap_chunk(),指针无效
- libxml2错误程序c++