0

我有一个疯狂的想法,如果将错误的数据放入控制台,我希望程序不执行任何操作。比如字母表,奇怪的字符。我想要的只是十进制数字和一个可以接受的句点。如果输入了错误的数据,我希望程序停留在那里,并且在您按 Enter 后什么也不做。

我的心态认为:

if (sum != decimal)
{
   // Don't do anything, just leave it as is. 
    code I have no clue about. 

}

现在,您一定在想,您不能将数据类型用于 if 语句!也许你可以,但它不适合我。对不起,我是个大菜鸟。

try
{

    Console.WriteLine("Put in the price of the product");

    string input = Console.ReadLine();
    decimal sum = Convert.ToDecimal(input);

    if (sum <= 100)
    {
        decimal totalprice = sum * .90m;
        Console.WriteLine("Your final price is {0:0:00}", totalprice);

    }

}


catch
{

}

我也在想,也许 try and catch 语句也可以,但同样,我也不知道该放什么。

如果您的答案可能是菜鸟安全和解释。(因为我想了解这些东西如何工作的概念)那会很好。

一个视觉示例:

堆栈溢出图像

当你按下回车键时,什么也没有发生,但是当你输入正确的数据类型时,程序将继续。

4

3 回答 3

2

数据类型不会写入控制台。只能从控制台输入中检索字符串。什么类型有字符串"2"- 十进制、整数、字节、字符串?您所能做的就是尝试从输入字符串中解析某种类型:

Int32.TryParse("2", out value)

对于您的情况:

Console.WriteLine("Put in the price of the product");
string input = Console.ReadLine();
decimal sum;
if (!Decimal.TryParse(input, out sum))
{
    Console.WriteLine("Decimal number cannot be parsed from your input.");
    return;
}

if (sum <= 100)
    Console.WriteLine("Your final price is {0:0:00}", sum * 0.90M);

更新

  • Decimal.TryParse - 将数字的字符串表示形式转换为其Decimal等效形式。返回值指示转换是成功还是失败。如果转换失败,它不会抛出异常。
  • !运算符- 它不是运算符。逻辑否定运算符 (!) 是一个对其操作数取反的一元运算符。当且仅当其操作数为 时,它才被定义bool并返回。truefalse

因此if (!Decimal.TryParse(input, out sum))验证转换是否不成功。然后我为用户放置了一条示例消息并从方法中退出(如果它是您的Main方法,那么程序将终止。但这一切都超出了您关于解析字符串的最初问题。

于 2012-11-03T00:15:30.370 回答
2

试试这个(注意 while/break 配对):

while (true)
{
    string input = Console.ReadLine();
    decimal sum;

    if (Decimal.TryParse(input, out sum) == true)
    {
        if (sum <= 100)
        {
            decimal totalprice = sum * .90m;
            Console.WriteLine("Your final price is {0:0:00}", totalprice);
            break;  // break out of while
        }
    }
}
于 2012-11-03T00:25:07.717 回答
0

如果您使用的转换函数无法将传递的字符串转换为请求的类型,我相信它会引发异常。一般来说,应该避免异常来控制程序流程,并为真正的意外情况保留。相反,您应该考虑使用一种不会引发异常,而是返回一个值来指示成功或失败的方法。有了这个 ind 你可以尝试:

    try
    {
        Console.WriteLine("Put in the price of the product");
        decimal sum;
        // Repeat forever (we'll break the loop once the user enters acceptable data)
        while (true)
        {
            string input = Console.ReadLine();
            // Try to parse the input, if it succeeds, TryParse returns true, and we'll exit the loop to process the data.
            // Otherwise we'll loop to fetch another line of input and try again
            if (decimal.TryParse(input, out sum)) break;
        }

        if (sum <= 100)
        {
            decimal totalprice = sum * .90m;
            Console.WriteLine("Your final price is {0:0:00}", totalprice);
        }
    }
    catch
    {

    }
于 2012-11-03T00:33:34.543 回答