PDA

View Full Version : سوال: ساخت معدل گیر در کنسول سی شارپ



mahdavi1385
پنج شنبه 08 اسفند 1398, 19:30 عصر
اکر بخواهیم یک برنامه نوشته که در آن متغیری تعریف کنیم که عددی از 0 تا 20 گرفته یعنی هم عدد صحیح و هم عدد اعشار مثلا 20 و 19/5 باید از چه کدی استفاده کنیم؟
کد زیر فقط عدد صحیح را می گیرد چگونه باید آن را به متغیری تبدیل کنیم که هم عدد صحیح و هم اعشار بگیرد.
int n =Convert.ToInt32(Console.ReadLine());
if ((int.TryParse(Console.ReadLine(), out n) == false) || (n < 0) || (n > 20))
{
Console.WriteLine("Error: Invalid input!");
}

the king
پنج شنبه 08 اسفند 1398, 21:22 عصر
اکر بخواهیم یک برنامه نوشته که در آن متغیری تعریف کنیم که عددی از 0 تا 20 گرفته یعنی هم عدد صحیح و هم عدد اعشار مثلا 20 و 19/5 باید از چه کدی استفاده کنیم؟
کد زیر فقط عدد صحیح را می گیرد چگونه باید آن را به متغیری تبدیل کنیم که هم عدد صحیح و هم اعشار بگیرد.
int n =Convert.ToInt32(Console.ReadLine());
if ((int.TryParse(Console.ReadLine(), out n) == false) || (n < 0) || (n > 20))
{
Console.WriteLine("Error: Invalid input!");
}

همیشه می توانید اعداد اعشاری و صحیح رو بین انواع داده مختلفی مثل float و int تفکیک کنید ولی وقتی مثل مثال شما لزومی به تفکیک نباشه استفاده از یک نوع داده مثل float یا double یا decimal برای هر دوشون کفایت می کنه. اعداد اعشاری مثل 19.5 و 3.14

float n;
if ((float.TryParse(Console.ReadLine()
, System.Globalization.NumberStyles.Number
, System.Globalization.CultureInfo.InvariantCulture, out n) == false)
|| (n < 0) || (n > 20))
{
Console.WriteLine("Error: Invalid input!");
}


ولی اگر می خواهید ممیز رو با / مشخص کنید، این رو باید به #C اطلاع بدید چون همچین تفسیری از / در فرمت های مرسوم زبان ها نیست :

float n;
var cultureInfo = (System.Globalization.CultureInfo) System.Globalization. CultureInfo.InvariantCulture.Clone();
cultureInfo.NumberFormat.NumberDecimalSeparator = "/";
if ((float.TryParse(Console.ReadLine()
, System.Globalization.NumberStyles.Number
, cultureInfo, out n) == false)
|| (n < 0) || (n > 20))
{
Console.WriteLine("Error: Invalid input!");
}

mahdavi1385
جمعه 09 اسفند 1398, 09:40 صبح
همیشه می توانید اعداد اعشاری و صحیح رو بین انواع داده مختلفی مثل float و int تفکیک کنید ولی وقتی مثل مثال شما لزومی به تفکیک نباشه استفاده از یک نوع داده مثل float یا double یا decimal برای هر دوشون کفایت می کنه. اعداد اعشاری مثل 19.5 و 3.14

float n;
if ((float.TryParse(Console.ReadLine()
, System.Globalization.NumberStyles.Number
, System.Globalization.CultureInfo.InvariantCulture, out n) == false)
|| (n < 0) || (n > 20))
{
Console.WriteLine("Error: Invalid input!");
}


ولی اگر می خواهید ممیز رو با / مشخص کنید، این رو باید به #C اطلاع بدید چون همچین تفسیری از / در فرمت های مرسوم زبان ها نیست :

float n;
var cultureInfo = (System.Globalization.CultureInfo) System.Globalization. CultureInfo.InvariantCulture.Clone();
cultureInfo.NumberFormat.NumberDecimalSeparator = "/";
if ((float.TryParse(Console.ReadLine()
, System.Globalization.NumberStyles.Number
, cultureInfo, out n) == false)
|| (n < 0) || (n > 20))
{
Console.WriteLine("Error: Invalid input!");
}


درست شد بسیار متشکرم