首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++代码中无休止地执行while循环?

在C++代码中无休止地执行while循环?
EN

Stack Overflow用户
提问于 2017-04-14 21:19:11
回答 3查看 71关注 0票数 0
代码语言:javascript
复制
char input[256];
do{
    cout<<"..."; //prompt
    scanf("%s",&input5); //user inputs string
    if(strcmp(input5,"block")==0)
    {}                                 //if the user types block, then it finishes the loop and goes to the cout at the bottom
    else if(strcmp(input5,"attack")==0)
    {
        cout<<"..."<<endl;
    }
    else if(strcmp(input5,"look")==0)
    {
        cout<<"..."
    }
    else
    {
        cout<<"..."<<endl;
    }
}while(strcmp(input5,"block")!=0); //loop ends when block is typed
cout<<"...";

我的do while循环有问题。我正在为学校做一个项目,其中包括一种文字冒险类游戏。用户正在提示如何响应攻击。所需的命令是"block",它将用户移动到下一个序列。当在scanf中输入"block“时,它会无休止地循环并打印"else”条件中的内容。我看不出问题是什么,所有的反馈都很受欢迎。

EN

回答 3

Stack Overflow用户

发布于 2017-04-14 21:28:45

我刚刚试过你的代码,它工作得很好(尽管我去掉了scanf中的&),并将'input5‘创建为一个字符数组。

尽管如此,还是有一些你可能想要改变的东西。我坚持使用“cin”而不是“scanf”,因为你混合了C和C++。这将允许您使用‘字符串’作为'input5',并使用'==‘运算符比较它们,这是相当干净的。也许也可以想一个比'input5‘更具描述性的名字,如果你有很多'inputX’变量,事情就会变得一团糟。

编辑:我也避免“使用名称空间std;",因为您可能会以命名冲突而告终。

票数 2
EN

Stack Overflow用户

发布于 2017-04-14 21:24:44

很可能在scanf行的input5之前不需要&运算符,因为scanf期望%s字段的内容已经是指针/数组。虽然我不知道input5是如何声明的,所以我不确定这是否是唯一的问题。您也应该将其包含在代码片段中。

编辑:只需注意:混合C风格(scanf)和C++风格(cout) IO并不是特别优雅。使用cin就不会有这个问题。

票数 0
EN

Stack Overflow用户

发布于 2017-04-14 21:43:01

显然,循环不会终止,因为字符串比较不返回相等。这一定是因为input5不包含键入的输入(出于同样的原因,无论输入是什么,else子句都会被执行)。

由于input5仅由scanf调用修改,因此这一定是邪恶的根源。一个简单的调试会话就可以立即揭示它。

原因很简单:您必须向scanf传递缓冲区的地址,但您实际上是在传递地址的地址,并覆盖变量input5的值(我们没有声明,但可以推断出char*const char*)。

在32位环境中,这可能会通过覆盖堆栈而导致崩溃。在64位下,你需要更多的输入才能获得它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43412367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档