试图使用适当的货币面额为我的游戏。货币存储为一个字符串(即不能由于我的教授而改变),并且按照白金,金,银和铜的顺序存储。例如,如果我将我的货币初始化为“0.1.23.15”,这意味着我有0白金,1黄金,23白银和15铜。货币面额
但是,我需要能够转换到更高的面额。那是什么意思?一个例子是如果我有105个银片(即0.0.105.0),它应该显示为1个金和5个银(即0.1.5.0)。
我在我的setCost方法中加粗了我的问题。我正在检查一个大于100的数字,如果是 - 我使该列为0,返回到前一个元素,并向ASCII值加1,以提供适当的进位。不幸的是,调试器显示“/ 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;
}
uhm ...不知道这里,但是,为什么0?如果是150S,那应该是1G50S,不是吗?你需要看看分裂和余下......这应该有所帮助:http://www.daniweb.com/software-development/cpp/threads/9349/c-division-remainder-help注意最后一个帖子,这是非常重要的... – MaxOvrdrv 2013-04-05 03:13:35
这绝对是我的错。它应该是模数算子得到余数(即如果它是105,其余的将是5,其中一个作为进位)。 – MrPickle5 2013-04-05 03:17:18