我已经编写了我的代码,我想以这样的方式对其进行验证,它只允许插入内容而不是字母。这是代码,请你帮助我。感谢。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace minimum
{
class Program
{
static void Main(string[] args)
{
int a = Convert.ToInt32(Console.ReadLine());
int b = Convert.ToInt32(Console.ReadLine());
int c = Convert.ToInt32(Console.ReadLine());
if (a < b)
{
if (a < c)
{
Console.WriteLine(a + "is the minimum number");
}
}
if (b < a)
{
if (b < c)
{
Console.WriteLine(b + "is the minimum number");
}
}
if (c < a)
{
if (c < b)
{
Console.WriteLine(c + "is the minimum number");
}
}
Console.ReadLine();
}
}
}
答案 0 :(得分:15)
您应该测试它是否为int而不是立即转换。 尝试类似:
string line = Console.ReadLine();
int value;
if (int.TryParse(line, out value))
{
// this is an int
// do you minimum number check here
}
else
{
// this is not an int
}
答案 1 :(得分:10)
只需调用Readline()并使用Int.TryParse循环,直到用户输入有效数字:)
int X;
String Result = Console.ReadLine();
while(!Int32.TryParse(Result, out X))
{
Console.WriteLine("Not a valid number, try again.");
Result = Console.ReadLine();
}
希望有所帮助
答案 2 :(得分:9)
要让控制台过滤掉按字母顺序排列的键击,您必须接管输入解析。 Console.ReadKey()方法是这个的基础,它可以让你嗅到按下的键。这是一个示例实现:
static string ReadNumber() {
var buf = new StringBuilder();
for (; ; ) {
var key = Console.ReadKey(true);
if (key.Key == ConsoleKey.Enter && buf.Length > 0) {
return buf.ToString() ;
}
else if (key.Key == ConsoleKey.Backspace && buf.Length > 0) {
buf.Remove(buf.Length-1, 1);
Console.Write("\b \b");
}
else if ("0123456789.-".Contains(key.KeyChar)) {
buf.Append(key.KeyChar);
Console.Write(key.KeyChar);
}
else {
Console.Beep();
}
}
}
您可以在if()语句中添加Decimal.TryParse(),该语句检测Enter键以验证输入的字符串是否仍然是有效数字。这样你可以拒绝输入“1-2”。
答案 3 :(得分:1)
请勿立即转换用户的输入。将它放在一个字符串中并使用Int32.TryParse(...)来确定是否输入了一个数字。像这样:
int i;
string input = Console.ReadLine();
if(Int32.TryParse(input, out i))
{
// it is a number and it is stored in i
}
else
{
// it is not a number
}
答案 4 :(得分:1)
请注意
if (a < b) {
if (a < c) {
相当于
if (a < b && a < c) {
并且后一种形式引入了较少的嵌套并且更易读,特别是如果您的代码变得更复杂。此外,你应该从不使用Convert.ToInt32
- 它有一个特别错误和令人惊讶的角落案件;并且它的类型安全性也低于int.Parse
,这是可能的最佳选择 - 或int.TryParse
当您不确定字符串是否有效时。基本上,尽可能避免使用Convert....
。
答案 5 :(得分:1)
string Temp;
int tempInt,a;
bool result=false;
while ( result == false )
{
Console.Write ("\n Enter A Number : ");
Temp = Console.ReadLine ();
result = int.TryParse (Temp, out tempInt);
if ( result == false )
{
Console.Write ("\n Please Enter Numbers Only.");
}
else
{
a=tempInt;
break;
}
}
答案 6 :(得分:0)
我首选的解决方案是:
static void Main()
{
Console.WriteLine(
(
from line in Generate(()=>Console.ReadLine()).Take(3)
let val = ParseAsInt(line)
where val.HasValue
select val.Value
).Min()
);
}
static IEnumerable<T> Generate<T>(Func<T> generator) {
while(true) yield return generator();
}
static int? ParseAsInt(string str) {
int retval;
return int.TryParse(str,out retval) ? retval : default(int?);
}
当然,根据规格(如果重试无效号码?),可能需要调整。
答案 7 :(得分:0)
<强>双/浮子:强>
我只是在扩展@Hans Passant答案(照顾DecimalSeparator和“ - ”):
static double ReadNumber()
{
var buf = new StringBuilder();
for (; ; )
{
var key = Console.ReadKey(true);
if (key.Key == ConsoleKey.Enter && buf.Length > 0)
{
Console.WriteLine();
return Convert.ToDouble(buf.ToString());
}
else if (key.Key == ConsoleKey.Backspace && buf.Length > 0)
{
buf.Remove(buf.Length - 1, 1);
Console.Write("\b \b");
}
else if (System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator.Contains(key.KeyChar) && buf.ToString().IndexOf(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator) == -1)
{
buf.Append(key.KeyChar);
Console.Write(key.KeyChar);
}
else if ("-".Contains(key.KeyChar) && buf.ToString().IndexOf("-") == -1 && buf.ToString() == "")
{
buf.Append(key.KeyChar);
Console.Write(key.KeyChar);
}
else if ("0123456789".Contains(key.KeyChar))
{
buf.Append(key.KeyChar);
Console.Write(key.KeyChar);
}
else
{
Console.Beep();
}
}
}
答案 8 :(得分:0)
var getInput=Console.ReadLine();
int option;
//validating input
while(!int.TryParse(getInput, out option))
{
Console.WriteLine("Incorrect input type. Please try again");
getInput=Console.ReadLine();
}
答案 9 :(得分:-1)
试试这个简单
try
{
string x= "aaa";
Convert.ToInt16(x);
//if success is integer not go to catch
}
catch
{
//if not integer
return;
}