我在C#中编写程序,提示用户输入一年中某个月的数字。一旦他们输入了一个号码,它就应该回复一条错误消息,说明它无效或者说该号码有效的消息。现在它正确地提示用户,但它没有吐出我想要它的消息,它只是结束。这是代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MonthChecky
{
class Program
{
static void Main(string[] args)
{
const int LowNum = 1;
const int HighNum = 12;
Console.Write("Please enter a valid number for a month: ");
String UserIn = Console.ReadLine();
if (Convert.ToInt32(UserIn) < LowNum)
if (Convert.ToInt32(UserIn) > HighNum)
Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
else
Console.WriteLine("That is a valid number for a month");
}
}
}
有什么建议吗?
答案 0 :(得分:1)
你的逻辑是完全错误的。这是你的代码正确括号:
if (Convert.ToInt32(UserIn) < LowNum) {
if (Convert.ToInt32(UserIn) > HighNum) {
Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
} else {
Console.WriteLine("That is a valid number for a month");
}
} // No "else"
此代码仅在输入的数字低于1时打印任何。此外,它永远不会打印"That is an invalid number"
,因为数字必须高于12 和同时低于1,这是不可能的。
您需要更改代码才能使用&&
一次评估这两个条件。使用int.TryParse
检查用户输入的有效性。
int n;
if (int.TryParse(UserIn, out n) && n >= LowNum && n <= HighNum) {
Console.WriteLine("That is a valid number for a month");
} else {
Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
}
答案 1 :(得分:0)
正如您在评论中指出的那样,您想要使用
Int.Parse(input);
验证他们是否输入了一个数字,而不是Convert.ToInt32(输入),因为如果它不是数字,它将会抛出。
最后,添加一个
Console.ReadLine();
最后阻止程序关闭
所以:
var userIn = Console.Readline();
var number = 0;
if (!Int.TryParse(userIn, out number)){
Exit;
}
if (number < LowNum || number > highNum)
{
Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
}
else
{
Console.WriteLine("That is a valid number for a month");
}
Console.ReadLine();
答案 2 :(得分:0)
Or
布尔运算符,用于修复和简化if语句,ReadLine
调用不会自动关闭控制台窗口,以及int.Parse
用法。
if (int.Parse(UserIn) < LowNum || int.Parse(UserIn) > HighNum) // "or" operator
Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
else
Console.WriteLine("That is a valid number for a month");
Console.ReadLine();
答案 3 :(得分:0)
代码的逻辑很差。您只想检查输入的数字是否在指定的范围内。您的代码永远不会检查有效的范围。
if (Convert.ToInt32(UserIn) < LowNum)
if (Convert.ToInt32(UserIn) > HighNum)
Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
else
Console.WriteLine("That is a valid number for a month");
所以,它应该是这样的:
if ((Convert.ToInt32(UserIn) < LowNum || (Convert.ToInt32(UserIn) > HighNum)
{
Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
}
else
{
Console.WriteLine("That is a valid number for a month");
}
Console.ReadLine()
答案 4 :(得分:0)
您需要检查输入是否为非负数字以及整数(不是字符串,bool)。
int intValue;
bool inputSuccess = int.TryParse(UserIn, out intValue);
if(inputSuccess)
{
if (intValue > HighNum)
{
Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
}
else if(intValue<LowNum )
{
Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
}
else
{
Console.WriteLine("That is a valid number for a month");
}
}
else
{
Console.WriteLine("Please enter digits");
}