2016-07-14 58 views
-4

我到处寻找,我发现一个用于PHP,但不是C++。我正在为C++类中的一个项目制作一个小控制台rpg,我想避免函数和/或如果可能的话 - 但是如果没有,我会使用它们。字符串赋值错误。 (C++)

示例代码:

int main(){ 
    string pName; 
    string pWpnName; 
    int pDamage=0; 
    int wdSwrdD=1; 

if (pDamage==wdSwrdD)pWpnName="Wooden Sword"; 

cout<<"Please enter a name"; 
cin>>pName; 

pDamage++: 

cout<<"Name: "<<pName<<endl; 
cout<<"Weapon: "<<pWpnName<<endl; 
return 0} 

但每当我做到这一点的输出:Name: pName(如它应该)和Weapon:。它只是保持空白,我有一种感觉,这与我如何使用字符串有关...

+2

更改'pWpnName ==“Wooden Sword”';到'pWpnName =“木剑”;'你只是有一个错字。 –

+0

pWpnName被初始化为空字符串。它永远不会改变(检查你的if语句),所以它输出一个空字符串。 –

+0

@AfriCoffee此外,您的问题标题是完全误导。 –

回答

0

你的问题是,你犯了一个错字:==是平等比较,而=是作业。所以,你的代码段应改为​​:

if (pDamage==wdSwrdD) 
    pWpnName=="Wooden Sword"; // here you're doing comparison 

...到:

if (pDamage==wdSwrdD) 
    pWpnName="Wooden Sword"; // here you're doing assignment 

大多数编译器应该产生这种行为的一个警告,因为它是一个简单的错字作出,但可能难以去抓。

3

你不明白命令式语言(和C++是其中之一)的工作原理。程序按语句执行语句,并且您的if条件仅检查pDamage==wdSwrdD一次 - 执行流程经过该语句时。因此,事后你增加pDamage不会奇迹般地改变pWpnName(并且如果除此之外还有条件,但我认为这是一个错字),你需要将比较运算符==更改为赋值运算符=

所以你很可能需要一个循环,其中执行流程反复通过你的if语句(这就是创建循环的地方),但根据你提供的信息很难再说什么。

+0

Augh,我知道这是我的一部分,当谈到编程时,我确实是一个小菜鸟......是的, '=='操作符是一个错字。那么我如何让循环遍历整个程序的其余部分的if(else)语句呢?我是否需要使用一个单独的函数并调用它,或者有什么方法可以将它保存在main中? – AfriCoffee

+0

@AfriCoffee在线和商店有很多优秀的教科书,我怀疑我可以更好地解释它,因为您需要从非常基础的知识中学习。 – Slava

1

您可以使用函数getline()函数:

cout<<"Please enter a name"<<endl; 
getline(cin, pName); 
pDamage++; 

功能可以从流线,设置的std :: CIN的蒸汽参数,以及线路输入分配给一个变量。

0

在您的程序中,您尚未初始化字符串,并且正在为pName输入用户输入,因此它会显示名称。如果pWpnName在声明时没有被初始化,并且“if条件永不成立”,因为你已经初始化了pDamage = 0和wdSwrD = 1,并且我们知道如果(0 == 1)从不为真,字符串pWpnName永远不会初始化为木剑使它显示空白。