2014-01-10 164 views
-3

好吧,嘿。我製作了一個遊戲內的遊戲程序。我已經在我的電腦上爲他們自己的.txt加載數據。每當我嘗試命令(.load)它告訴我(在split [1]它被轉換爲一個int32),這只是一個測試,看看你的炸彈是否加載,輸入字符串格式不正確,繼承人的代碼:輸入字符串格式不正確?

StreamReader streemy = new StreamReader(@"c:\Usernames\" + player[m.GetInt(0)].username + ".txt"); 
string read = streemy.ReadToEnd(); 
if (!string.IsNullOrEmpty(read)) 
{ 
    string[] split = read.Split('='); 
    player[m.GetInt(0)].bombs = Convert.ToInt32(split[1]); 
    Say(names[m.GetInt(0)].ToUpper() + ": You data has been loaded!"); 
    streemy.Close(); 
} 
else 
{ 
    Say(names[m.GetInt(0)].ToUpper() + ": Your data was empty :(Say '.save' to save your current data!"); 
} 

.save保存數據到txt文件,「名[m.GetInt(0)]」是他們的用戶名,說只是告​​訴他們在遊戲中的消息。謝謝你的幫助! PS:玩家是一個結構,其中有像炸彈一樣的整數。

+0

那麼,會發生什麼沒有「=」在你讀的字符串,你想讀第一個位置拆分[1]? –

+0

'split [1]'的值是多少?只要把它放入一個字符串變量中,並檢查它是否可以是有效的整數。 – Sachin

+0

'm.GetInt(0)'和'split [1]'的值是什麼? –

回答

0

您必須得到FormatExceptionFormatException當爭論的格式不正確時引發。
我認爲split [1]的值不是一個有效的整數。根據msdn。

FormatException:值不包含一個可選符號,後跟一串數字(0到9)。

使用ToInt32(string)方法相當於將值傳遞給Int32.Parse(String)方法。值通過使用current thread culture的格式約定來解釋。
您可以改爲調用Int32.TryParse方法。它返回一個布爾值,指示轉換是成功還是失敗。

1

我建議你使用Int32.TryParse而不是Convert.ToInt32

因此,如果該值不是有效的整數,那麼你可以把0或者無彈

int numberOfBombs = 0; 
bool result = Int32.TryParse(value, out numberOfBombs); 

現在numberOfBombs將保留實際值如果存在其他有效的整型字段這將是0。

+1

謝謝:)但我發現錯誤。我有消息箱說它是炸彈是什麼,它給了0和rs,這應該是步槍射擊。我忘了它沒有分開,它保存像b = 0 rs = 0 ps = 0 h = 0所以,儘管 – user3105642

+0

你確定在'b = 0'之前沒有任何其他的'='呈現在文本文件? – Sachin