简单的二进制到十进制转换器 - C#中的问题

时间:2013-11-17 17:25:46

标签: c# loops while-loop int

我做了一个简单的二进制到十进制转换器,用来工作正常,我用一个字符串变量来声明值,但现在意识到我需要将它们存储为整数,因为我想在一段时间内添加循环结构验证用户选择,因此他们只能输入0或1。

但我现在有一个程序说Cannot convert from 'int' to 'System.IFormatProvider' ..因为我是C#的初学者,

我不知道这意味着什么,以及如何解决问题,任何帮助表示赞赏..如果有人想看看我的代码:

        int iBinaryNum; //To store binary number
        int iDecimalNum; //To store decimal numbers

        //Validation of user choice & main program
        while (iBinaryNum == 0 || iBinaryNum == 1)
        {
            Console.WriteLine("Enter the binary number you want to convert to decimal");
            iBinaryNum = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("The Binary number you have entered is " + iBinaryNum);
            iDecimalNum = Convert.ToInt32(iBinaryNum, 2);

            Console.WriteLine("This converted into decimal is " + iDecimalNum);
        }

        //If it's not equal to 0 or 1
        Console.WriteLine("Invalid binary number, Please re-enter");

        //Prevent program from closing
        Console.WriteLine("Press any key to close");
        Console.ReadKey();

5 个答案:

答案 0 :(得分:2)

iDecimalNum = Convert.ToInt32(iBinaryNum, 2);

您传递的参数是int, int。如您所见here,您可以选择Object, IFormatProviderString, IFormatProviderString, Int32

由于第一个int只能用作Object,这意味着第二个参数必须是IFormatProvider

如果你想要一个解决方案,你必须澄清你正在尝试做什么。为什么要将整数转换为整数?

答案 1 :(得分:2)

Convert.ToInt32(String, Int32)要求第一个参数为String,第二个参数为整数。您正在传递两个整数,这会解析为生成错误的Convert.ToInt32(Object, IFormatProvider)。您必须将第一个参数(iBinaryNum)转换为String。

但我不认为你的代码按预期工作,因为while条件只检查int中的任何一个是1还是0.如果用户输入1110则失败。此外,如果用户输入Int32.Max以上的任何内容(这不会太令人惊讶,考虑到二进制数的大小会增长),程序崩溃了。我会再次将用户输入存储在一个字符串中,并检查每个字符是否包含有效字符(1或0)。

像这样:

bool IsBinaryNumber(string test){
        foreach(char c in test){
            // If c is not either 0 or 1, break.
            if(!((c=='0') || (c== '1'))){
                return false;
            }
        }
        // If everything went well, it's a binary number.
        return true;
 }

答案 2 :(得分:1)

完整解决方案:

您可以使用Regular Expressions检查pattern

中的特定Input String

以下program将从用户处获取Binary输入并将其转换为decimal,直到找到无效值

       string strBinaryNum=""; //To store binary number
       int iDecimalNum; //To store decimal numbers
       System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex("^[0-1]+$");

        Console.WriteLine("Enter the binary number you want to convert to decimal");
        strBinaryNum = Console.ReadLine();
        while(r.Match(strBinaryNum).Success)
        {        
        Console.WriteLine("The Binary number you have entered is " + strBinaryNum);
        iDecimalNum = Convert.ToInt32(strBinaryNum, 2);            
        Console.WriteLine("This converted into decimal is " + iDecimalNum);

         Console.WriteLine("Enter the binary number you want to convert to decimal");
         strBinaryNum = Console.ReadLine();
        }
        Console.WriteLine("Press any key to close");
        Console.ReadKey();

答案 3 :(得分:0)

如果您查看Convert.ToInt32的不同重叠,您会发现没有任何重载Int32, Int32

重载决策将选择代替object, IFormatProvider2Int32的那个,而不是实现IFormatProvider的类型,因此错误。

目前尚不清楚为什么要将Int32转换为Int32 - 您已经拥有iBinaryNum中的值。

答案 4 :(得分:0)

我不确定我是否真的理解这个问题。然而,这是一个循环,一旦满足二进制数要求,它将保持唯一的继续。

uint iBinaryNum = 2; //To store binary number
decimal iDecimalNum; //To store decimal numbers

//Validation of user choice & main program
while (iBinaryNum > 1)
{
    Console.Write("Enter the binary number you want to convert to decimal: ");
    if (!uint.TryParse(Console.ReadLine(), out iBinaryNum) || iBinaryNum > 1)
    {
        //If it's not equal to 0 or 1
        Console.WriteLine("Invalid binary number, Please re-enter");
        iBinaryNum = 2;
    }
}

iDecimalNum = Convert.ToDecimal(iBinaryNum);
Console.WriteLine("This converted into decimal is " + iDecimalNum);