在用 C# 撰寫我的第二個程式后,我收到一個錯誤:
編譯器錯誤
錯誤可能與庫有關,也可能與轉換或命名空間有關
using System;
namespace MagpantayUserInfoProg {
class UserInfo {
static void Main() {
string name, gender; // Variables for storing words
int contact, age; // Variables for storing integers
Console.Write("Name: "); // Let the user input his name
name = Console.ReadLine(); // System reads data
Console.Write("Gender: "); // Let the user input his gender
gender = Console.ReadLine();// System reads data
Console.Write("Age: "); // Let the user input his age
age = Int32.Parse(Console.ReadLine()); // System reads data
Console.Write("Mobile Number: "); // Let the user input his contact number
contact = Int32.Parse(Console.ReadLine()); // System reads data
// Display Output
Console.Write("Name: {0}\n", name);
Console.Write("Gender: {0}\n", gender);
Console.Write("Age: {0}\n", age);
Console.Write("Mobile Number: {0}\n", contact);
Console.ReadLine();
}
}
}
uj5u.com熱心網友回復:
手機號碼對于 int 來說太大了
https://docs.microsoft.com/tr-tr/dotnet/csharp/language-reference/builtin-types/integral-numeric-types
檢查整數范圍
也使用字串來存盤手機號碼
uj5u.com熱心網友回復:
讓我們剖析一下錯誤資訊:
值對于 Int32 來說太大或太小
所以,這告訴我們問題出在我們正在創建 Int32 的某個地方,并且Int32.Parse(Console.ReadLine());符合要求,不僅我們在這里創建了 Int32,而且這也是程式中遇到錯誤(例外)(拋出)的點)。但為什么?好吧,因為計算機沒有無限記憶體,所以不久前人們(閱讀:軟體開發人員)決定了一堆關于如何在計算機內部表示資料的標準,這些標準包含限制,以及 Int32 的限制(順便說一下,這是intC# 中的標準)不小于-2,147,483,648也不大于2,147,483,647(源),但是您的電話號碼09,563,977,528大于允許的最大值,因此出現錯誤。
所以我們現在怎么辦?好吧,我們可以使用更大的整數型別,比如longand Convert.ToInt64,但這只是一個創可貼的解決方案,而我們應該使用 a string(或更專業的資料結構*)。想一想,電話號碼真的只是一個號碼嗎?不,它不是,一個電話號碼09563977528,并9563977528是不一樣的吧?但是,如果它們是常規的舊數字,那么它們將是,02并且2是完全相同的數字。此外,對電話號碼使用算術運算并沒有真正意義,永遠不需要乘、減或加或任何兩個電話號碼在一起。因此,出于這些原因,我建議我們將電話號碼保留為字串。
* 當您了解類和結構時,一個很好的練習是實作一個表示電話號碼的自定義類
uj5u.com熱心網友回復:
正如其他人指出的那樣,該數字太大而無法存盤為 Int (Int32) 值,該值可以處理之間的任何數字
-2,147,483,648 和 2,147,483,647
通常,您無論如何都不應該將電話號碼存盤為數值,因為許多電話號碼都包含一個前導零,這很重要,但如果您將值存盤為數字,則無法存盤。但由于并非所有電話號碼都包含前導零,因此您不能假設總有一個。
因此,您需要將其存盤為字串值,然后包含一些驗證以確保僅輸入數字。有許多不同的方法可以做到這一點,因此您可以進一步調查以了解哪種方法適合您,但作為示例,您可以嘗試這樣做,它將掃描字串以檢查每個字符是否為數字。
Console.Write("Mobile Number: "); // Let the user input his contact number
contact = Console.ReadLine(); // System reads data
if (contact.All(char.IsDigit))
{
// String only contains numbers
}
else
{
//Handle error here
}
編輯:當然這個解決方案只允許數字。因此,如果用戶希望使用“ ”作為國家/地區代碼的前綴,則將不支持此操作。因此,您需要更改解決方案以支持這一點。
另外,僅供參考:您沒有編譯器錯誤,您有運行時例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/363626.html
標籤:C#
