字符串分配中出错.(C++)

Error in Strings assignment. (C++)

本文关键字:C++ 出错 分配 字符串      更新时间:2023-10-16

我到处找过,我找到了一个用于php而不是c ++的。我正在为我的 into to 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:.它只是保持空白,我有一种感觉这与我如何使用字符串有关......

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

因此,您很可能需要一个循环,其中执行流反复通过您的if语句(这就是创建循环的目的),但很难根据您提供的信息说更多的话。

您可以使用 getline() 函数:

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

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

你的问题是你打错了一个错字:==是相等比较,而=是赋值。 因此,您的代码部分应该更改:

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

。自:

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

大多数编译器应为此行为生成警告,因为它很容易出错,但可能很难捕获。

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