我想製作一個程序來玩撲克。當下注玩家應該輸入一個整數作爲他們的新注。爲防止有人錯誤輸入字符串時發生錯誤,該代碼旨在輸入字符串,檢查它是否是數字,如果不是,則請求玩家輸入有效的下注。使用istringstream()來區分「0」和非數字字符串
以下代碼是我嘗試使用istringstream函數將字符串betstring轉換爲int的函數。
如果字符串中沒有數字,istringstream返回0。 betstring是一個無效的條目,如果它是一個小於0的數字或者它不包含數字。如果比特串是「0」,這是一個有效的賭注。
如果betstring是混合的字母和數字(例如j96kp),那麼這個「j96kp」被假定爲表示爲了簡化而下注96,所以它是有效的。
問題出在我輸入一個等於「0」的betstring時。該代碼將其解釋爲無效投注。我檢查了邏輯運算符,我不明白爲什麼代碼不會將「0」作爲有效投注。
任何人都可以發現問題出現的地方嗎?
#include <stdlib.h>
#include <stdio.h>
#include <sstream>
#include <string>
using namespace std;
int requestBet()
{
int newbet;
string betstring;
int validbet = 0;
while(!validbet)
{ //loop until a valid bet is entered
cin >> betstring;
validbet = 1; //assume bet is valid then test this
istringstream(betstring) >> newbet;
if(((newbet == 0) && (betstring.at(0) != 0)) || (newbet < 0))
{
cout << "Enter a valid bet" << endl;
validbet = 0;
}
}
return newbet;
}
int main()
{
int number;
cout << "Enter your bet" << endl;
number = requestBet();
return 0;
}
謝謝,這正是問題所在!我會在幾分鐘內「接受」這個答案 – Hugh