2016-03-30 31 views
-1

我对C++编程相当陌生,所以这可能是一个新手的错误。但。 (为什么我不能隐藏我的代码的其余部分...我想显示所有我在做什么..)程序识别第一个文本输出,但不是第二个文本输出

因此,首先,我的代码的开始看起来像这样(标题和这样的的代码,加上前几行)

#include <iostream> 
#include <string> 

using namespace std; 

string command;  
string playername; 
char response;  

string object; 

int main() 
{ 

    do 
    {   
     cout << "What is your name? "; 
     cout << endl; 

     cin >> playername; 
     cout << endl; 

     cout << "Your name is " << playername << "? (Y/N)" << endl; 
     cout << endl; 
     cin >> response; 

     cout << endl; 
     cout << endl; 

    } while ((response != 'y')&&(response != 'Y')); 
} 

然后这里的问题位:

do 
{ 
    cout << endl; 
    cout << "What will you do?"; 
    cout << endl; 

    cin >> command >> object; 

    if ((command == "look")&&(object == "door")) 
     cout << "You look at the door. It appears to be but a simple wooden door 
     with a brass handle for opening and shutting. "; 

    else if ((command == "Open")&&(object == "door")) 
     cout << "You open the door and proceed to the next room"; 

    } while ((command == "look")&&(command == "Look")); 
} 

我的程序会当我把在“看”和“门”承认(如命令和对象)并以适当的“这是一扇门”的方式回应。但是,当我放入“打开”和“门”时,它只是接受它并结束程序,而不显示文本。

如果有任何方法可以纠正这一点,我会非常感激。

谢谢!

编辑:为便于阅读, EDIT2:最后一行改为

}while ((command == "look")||(command == "Look")); 

,我也得到: the bulwarky that is this code

+1

虽然编译不关心格式化和缩进等事情,我们人类是这样做的。请尝试使用缩进来格式化代码,以便阅读。 –

+0

Aaah对不起:S我很不习惯这个,只是想把所有东西都放在一起.. – KitKatarine

回答

0

你的阅读和打印的代码,因为你的条件是无效只能使用一次。我假设如果你输入“Open”和“door”作为你的第一个命令,你将得到你的开放文本,然后程序停止。

您的程序一旦读取您的代码的原因是因为do-while循环是以这种方式构建的。它将执行一次循环,然后通过查看while(..)语句是否仍然有效来检查是否需要再次执行该循环。


下面是关于do-while循环的一些额外信息。 http://www.tutorialspoint.com/cplusplus/cpp_do_while_loop.htm

从链接网站援引:

一个做的语法...而循环在C++是:

do 
{ 
    statement(s); 
} 
while(condition); 

注意的是,条件 表达式出现在循环结束,所以测试条件之前在 循环语句(多个)执行一次。


我不知道你在程序想要的行为;你想什么时候停止该计划?如果你想继续寻找和打开门,我建议你改变,而(..)语句

while (command != "stop"); 

这样的计划将继续下去,直到你在单词键入“停止”

+0

我以为我做得正确。只要用户输入外观,我就希望它循环播放,但不要在用户输入时打开。到目前为止(我确信我没有在主文章中解释这个问题),当我输入look时,我可以得到它,这是预期的行为,但是当我打开时,它不会显示文本我想要。而只是终止程序。 – KitKatarine

+0

现在它是这样的:https://i.gyazo.com/83930a7d4932f7b588069473f4417a11.png啊,我不好在这...我想要的行为是:当用户看着门时循环。但是当用户打开门时,我希望它显示文字“您打开门并继续...... blabla”。它目前没有做。我真的很感激你的帮助,顺便说一下.. – KitKatarine

+0

尝试打字“打开”与首都O,因为你在比较它与“打开”在其他如果(..) –

2

表达(command == "look")&&(command == "Look")如果command"look""Look"的只会是真实的同时,这是不可能的,并会使条件false

您应该使用逻辑代替:(command == "look")||(command == "Look")

+1

另外“开放”只是用大写字母O来指定。值得注意的是。 –

+0

哦,天知道我知道。我尝试过所有的方式。我已经注意到大写O和小O.我已经尝试过||区分一切。我只是不知所措 – KitKatarine

+0

或者您可以使用Boost库来使所有的命令都变成非大写字符。那么你不需要将你的命令与“look”和“look”进行比较,但是只需比较你的命令和“look”即可。看到http://stackoverflow.com/questions/3403844/tower-function-for-c-strings –

0

你的问题在于“开放”和“开放”之间的型动物。这是真的很难,所以检查这两种情况下的所有字符串。所以也许你可以使用std :: toupper函数。

尝试这样:

if(toupper(command) == toupper("open") && toupper(object) == toupper("door")) 

编辑:参考toupper-function

+0

我也会尝试。谢谢。 – KitKatarine

+0

呼叫toupper没有匹配的函数,它说。有我需要的标题吗? – KitKatarine

相关问题