尝试为我的游戏使用适当的货币面额。货币以字符串形式存储(即,由于我的教授,无法更改),并且按铂金、黄金、白银和铜的顺序排列。例如,如果我将我的货币初始化为“0.1.23.15”,这意味着我有 0 白金、1 黄金、23 银和 15 铜。
然而,我需要能够转换到更高的面额。这意味着什么?例如,如果我有 105 个银币(即 0.0.105.0),它应该显示为 1 金和 5 银(即 0.1.5.0)。
我在 setCost 方法中加粗了我的问题。我正在检查一个数字是否大于 100,如果是 - 我将该列设为 0,返回到前一个元素并在 ASCII 值上加一,给出正确的进位。不幸的是,调试器显示“/x4”被转储到元素中,而不仅仅是“4”。有谁知道这是为什么以及我该如何改变它?
编辑:编辑了代码,只要您不输入超过 100 的数字,它就可以工作。对于如何使其适用于大于 100 的数字,大脑出现了失误。
这是我写过的最草率的代码。请温柔一点。:(
void Potion::setCost(std::string cost)
{
char buffer[256];
std::string currencyBuffer [4];
int integerBuffer[4];
int * integerPointer = nullptr;
int temp = 0;
int i = 0;
char * tokenPtr;
//Convert string to cString
strcpy(buffer, cost.c_str() );
//Tokenize cString
tokenPtr = strtok(buffer, ".");
while(tokenPtr != nullptr)
{
//Convert ASCII to integer
temp = atoi(tokenPtr);
//Store temp into currency buffer
integerBuffer[i] = temp;
//Make pointer point to integer buffer
integerPointer = &integerBuffer[i];
if(*integerPointer < 100)
currencyBuffer[i] = tokenPtr;
else
{
//Store zero in column if number is
//greater than 100
temp2 = temp % 100;
itoa(temp2, temp3, 10);
currencyBuffer[i] = temp3;
//Go back and add one to currency buffer
temp = atoi(currencyBuffer[i-1].c_str());
temp += 1;
itoa(temp, temp3, 10);
currencyBuffer[i - 1] = temp3;
}
i++;
//Get next token
tokenPtr = strtok(nullptr, ".");
}
NewLine();
std::string tempBuffer;
//Store entire worth of potions
tempBuffer = "Platinum: ";
tempBuffer += currencyBuffer[0];
tempBuffer += "\nGold: ";
tempBuffer += currencyBuffer[1];
tempBuffer += "\nSilver: ";
tempBuffer += currencyBuffer[2];
tempBuffer += "\nCopper: ";
tempBuffer += currencyBuffer[3];
mCost = tempBuffer;
}