字符串赋值错误。 (C ++)

时间:2016-07-14 17:39:21

标签: c++ string console

我到处寻找,我找到了一个用于PHP而不是c ++。我正在为我的c ++课程中的一个项目制作一个小的控制台RPG,我想避免使用函数和/或如果可能的话 - 但如果不是,我会使用它们。

示例代码:

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:。它只是保持空白,我感觉这与我如何使用字符串有关...

4 个答案:

答案 0 :(得分:3)

您不了解命令式语言(以及C ++之一)如何工作的基础知识。程序按语句执行语句,并且您的if条件仅检查pDamage==wdSwrdD一次 - 当执行流程通过该语句时。因此,您稍后增加pDamage这一事实不会神奇地更改pWpnName(并且您需要将比较运算符==更改为赋值运算符=,除此之外的条件,但我认为这是一个错字。)

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

答案 1 :(得分:1)

您可以使用getline()函数:

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

该函数可以从流中获取一行,将std :: cin设置为steam参数,并为变量分配一行输入。

答案 2 :(得分:0)

你的问题是你犯了一个拼写错误:==是平等比较,而=是作业。因此,您的代码部分应该更改:

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

...为:

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

大多数编译器应该为这种行为生成一个警告,因为它很容易制作,但很难捕获。

答案 3 :(得分:0)

在你的程序中,你没有初始化字符串,你正在为pName获取用户输入,因此它显示了名称。如果pWpnName在声明时没有初始化,并且&#34; if条件永远不会变为真&#34;因为你已经初始化了pDamage = 0和wdSwrD = 1并且我们知道如果(0 == 1)永远不为真,字符串pWpnName永远不会被初始化为Wooden Sword,所以它显示为空白。