試圖使用適當的貨幣面額爲我的遊戲。貨幣存儲爲一個字符串(即不能由於我的教授而改變),並且按照白金,金,銀和銅的順序存儲。例如,如果我將我的貨幣初始化爲「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