ゲームに適切な通貨単位を使用しようとしています。通貨は文字列として保存され (つまり、私の教授のために変更することはできません)、プラチナ、ゴールド、シルバー、銅の順になっています。たとえば、通貨を「0.1.23.15」に初期化すると、これは、プラチナが 0、ゴールドが 1、シルバーが 23、銅が 15 であることを意味します。
ただし、より高い宗派に変換できる必要があります。どういう意味ですか?例として、105 枚の銀貨 (つまり 0.0.105.0) がある場合、1 枚の金と 5 枚の銀 (つまり 0.1.5.0) として表示されるはずです。
setCost メソッド内で問題を太字にしました。数値が 100 より大きいかどうかを確認しています。そうである場合は、その列を 0 にし、前の要素に戻り、ASCII 値に 1 を追加して、適切な桁上げを行います。残念ながら、デバッガーは、単に "4" ではなく "/x4" が要素にダンプされていることを示しています。これがなぜなのか、どうすれば変更できるのか誰か知っていますか??
編集: コードを編集し、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;
}