从控制台获取c#输入,但未返回正确的输出

从控制台获取c#输入,但未返回正确的输出,c#,input,C#,Input,C#程序试图从用户那里获取输入,并使用这两个数字来查找产品 using System; namespace Program { class MainClass { static int computeProd1(int num1, int num2) { return (num1 * num2); } public static void Main (string[] args)

C#程序试图从用户那里获取输入,并使用这两个数字来查找产品

using System;

namespace Program
{
    class MainClass
    {
        static int computeProd1(int num1, int num2)
        {
            return (num1 * num2);
        }

        public static void Main (string[] args)
        {
            int first, second;

            Console.Write ("enter first number: ");
            first = Convert.ToInt32 (Console.ReadLine ());
            Console.Write ("enter 2nd number: ");
            second = Convert.ToInt32 (Console.ReadLine ());

            int product = computeProd1 (first, second);
            //Console.WriteLine ("\n First number is: {0}" , first);
            //Console.WriteLine ("\n Second number is: {0}" , second);
            Console.WriteLine ("\nTheir product is: {0}" , product);
            Console.ReadKey ();     
        }
    }
}

第一个和第二个数字已经输出了一个数字,不管我放什么。

也许可以试试这段代码

更新

通过使用int.tryParse()实现更多的防故障方法


console.Read返回输入的字符的ascii码,而不是int值

请尝试此代码,它将要求输入号码(仅限号码),然后返回产品:

class Program
{
    static int computeProd1(int num1, int num2)
    {
        return (num1 * num2);

    }

    public static void Main(string[] args)
    {

        int? first = null, second = null;
        int first_i = 0, second_i = 0;

        while (!first.HasValue)
        {
            Console.WriteLine("enter first number");

            if (int.TryParse(Console.ReadLine(), out first_i))
            {
                first = first_i;
            }
        }

        while (!second.HasValue)
        {
            Console.WriteLine("enter second number");

            if (int.TryParse(Console.ReadLine(), out second_i))
            {
                second = first_i;
            }
        }

        int product = computeProd1(first_i, second_i);
        Console.WriteLine("Their product is:\t" + product);
        Console.Read();
    }
}
默认情况下,基于当前值返回输入字符的值。例如,这里有一个链接,它可能解释了为什么0得到48,等等

如果只想使用单个数字,可以使用获取实际键值。对于多位数值,可以使用该方法。以下是两个方面的示例:

int first, second;
//for single digit inputs
var singleDigitInput1 = Convert.ToChar(Console.Read).ToString();
var singleDigitInput2 = Convert.ToChar(Console.Read).ToString();

//for multi digit inputs
var multiDigitInput1 = Console.ReadLine();
var multiDigitInput2 = Console.ReadLine()

if (int.TryParse(singleDigitInput1, out first) && int.TryParse(singleDigitInput2, out second))
{
    int product = computeProd1(first, second);
    Console.WriteLine("Their product is:\t" + product);
}
else
{
    //input cannot be converted to int
}

那么问题是什么,您不想接受非数字输入吗?只想接受数字输入如果我输入0,它将打印48,任何大于0的数字都将添加48。TryParse()就是您想要的。问题是您使用的是Read()而不是ReadLine()它给了我一个异常错误输入字符串的格式不正确更新了我的答案,我建议使用s-s给出的示例。有很多方法可以通向罗马,有些方法比其他方法更好。好吧,可能不是ASCII,但想法是一样的。请参阅。@TomBlodget谢谢您指出,我将删除该引用
int first, second;
//for single digit inputs
var singleDigitInput1 = Convert.ToChar(Console.Read).ToString();
var singleDigitInput2 = Convert.ToChar(Console.Read).ToString();

//for multi digit inputs
var multiDigitInput1 = Console.ReadLine();
var multiDigitInput2 = Console.ReadLine()

if (int.TryParse(singleDigitInput1, out first) && int.TryParse(singleDigitInput2, out second))
{
    int product = computeProd1(first, second);
    Console.WriteLine("Their product is:\t" + product);
}
else
{
    //input cannot be converted to int
}