在C ++代码中无限循环吗?

时间:2017-04-14 13:19:11

标签: c++

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<<"...";

我在使用while while循环时遇到问题。我正在为学校做一个涉及文本冒险游戏的项目。用户正在提示如何响应攻击。所需的命令是“阻止”,它将用户移动到下一个序列。当“block”被输入scanf时,它会无休止地循环并打印处于“其他”状态的内容。我不知道问题是什么,所有的反馈都得到了赞赏。

3 个答案:

答案 0 :(得分:2)

我只是尝试了你的代码并且它工作正常(虽然我删除了&amp; in scanf),并创建了'input5'作为char数组。

尽管如此,您可能想要改变一些事情。我坚持使用'cin'而不是scanf,因为你正在混合使用C和C ++。这将允许您使用'string'作为'input5',并使用'=='运算符进行比较,这更加清晰。也许想想一个比'input5'更具描述性的名字,好像你有很多'inputX'变量,那么事情会变得混乱。

编辑:我也不会使用“使用namespace std;”,因为你最终可能会命名冲突。

答案 1 :(得分:0)

很可能你不需要&amp; scanf行上的input5之前的运算符,因为scanf期望的%s字段已经是指针/数组。虽然我没有看到input5是如何声明的,所以我不确定这是否是(唯一的)问题。您应该将其包含在代码段中。

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

答案 2 :(得分:0)

显然,循环不会终止,因为字符串比较不会返回相等。这必须是因为input5不包含输入的类型(出于同样的原因,无论输入如何都会执行else子句。)

由于input5仅由scanf调用修改,因此必须是邪恶的根源。一个简单的调试会话就会立即显示出来。

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

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