C#if和控制台运行不正常

时间:2016-11-05 10:01:35

标签: c#

这个程序运作不佳。输出总是: 你可以喝酒!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Superif
{
    class Program
    {
        static void Main(string[] args)
        {
            int age;
            string result; 

            Console.WriteLine("Please enter your age!");
            age = Console.Read();

            if (age >= 18)
            {
                result = "You can drink alcohol!";
            }
            else
            {
                result = "You can't drink alcohol!";
            }


            Console.WriteLine(result);
            Console.ReadKey();

        }
    }
}

2 个答案:

答案 0 :(得分:4)

您使用的是错误的方法。 Console.Read我的MDSN

  

从标准输入流中读取下一个字符。

如果您输入"18"并检查age的值,则会看到它49"1"的ASCII值。

使用Console.ReadLine()代替读取整个字符串行,然后将其解析为int

static void Main(string[] args)
{
    int age;
    string result;

    Console.WriteLine("Please enter your age!");
    if(!int.TryParse(Console.ReadLine(),out age))
    {
        result = "Invalid Input";
    }
    else if (age >= 18)
    {
        result = "You can drink alcohol!";
    }
    else
    {
        result = "You can't drink alcohol!";
    }

    Console.WriteLine(result);
    Console.ReadKey();
}

另请注意,我决定使用int.TryParse而不是int.Parse来避免无效投射的例外

答案 1 :(得分:3)

因为Console.Read()会给你ASCII值而不是整数值。所以你应该试试Console.ReadLine()

    int age;
    string result;

    Console.WriteLine("Please enter your age!");
    age = Convert.ToInt32(Console.ReadLine());

    if (age >= 18)
    {
        result = "You can drink alcohol!";
    }
    else
    {
        result = "You can't drink alcohol!";
    }


    Console.WriteLine(result);
    Console.ReadKey();