簡體   English   中英

C# 如何設置條件語句以排除用戶輸入?

[英]C# how to set a conditional statement to except user input?

我有一個簡單的控制台應用程序,可以將磅轉換為公斤,反之亦然。 我想要做的是,如果用戶輸入 lb 然后運行 function 將磅轉換為千克,否則如果用戶輸入 kg,則運行 function 將千克轉換為磅。

在 main 條件的設置部分,我收到錯誤“使用未分配的局部變量 'lb'

...代碼(片段):

//將KG轉換為Lbs的方法

public void ConvertKg()
{
    Console.WriteLine("C# KG to LB program\n");

    Console.Write("Enter a number in KG: ");
    double kilograms = Convert.ToDouble(Console.ReadLine());

    double pounds = kilograms * 2.20462262185;
    Console.WriteLine(kilograms + " kilograms is " + pounds + " pounds");


}

//將Lbs轉換為KG的方法

public void ConvertLb()
{
    Console.WriteLine("C# LB to KG program\n");

    Console.Write("Enter a number  in lbs:");
    double pounds_userEntry = Convert.ToDouble(Console.ReadLine());

    double kilogram_userEntry = pounds_userEntry * 0.453592;
    Console.WriteLine(kilogram_userEntry + " kilograms is " + pounds_userEntry + " pounds");


}

...主要的:

string lb, kg;
string userInput = "";

Console.Write("Enter either lb or kg:");           

if(userInput == lb) // where the error occurs
{
    var k = new ConvertNumber();
    k.ConvertLb();
}
else
{
    var l = new ConvertNumber();
    l.ConvertKg();

}
Console.ReadLine();

...問題似乎在我用來設置條件語句以接受用戶輸入的方法中。 ...對於我做錯了什么,我能得到一些幫助嗎?

不需要做string lb, kg; ,所以你可以把它排除在外。

userInput被分配給"" ,但它可能應該包含來自用戶的某些內容。 代替

string userInput = "";

Console.Write("Enter either kg or lb: ");

string userInput = Console.ReadLine() // Console.ReadLine enables the user to type some text and returns it

因為

Console.Write("Enter either kg or lb");

現在已經完成了,以后可以不放了。

現在您可以將userInput"lb""kg"進行比較。

代替

if(userInput == lb)
{
    var k = new ConvertNumber();
    k.ConvertLb();
}
else
{
    var l = new ConvertNumber();
    l.ConvertKg();
}
Console.ReadLine();

if (userInput == "lb") {
    ConvertLb();
} else if (userInput == "kg") {
    ConvertKg();
} else {
    Console.WriteLine("Your input was neither lb nor kg");
}

最終代碼(主要):

Console.Write("Enter either kg or lb: ");

string userInput = Console.ReadLine() // Console.ReadLine enables the user to type some text and returns it

if (userInput == "lb") { // The user typed "lb"
    ConvertLb();
} else if (userInput == "kg") { // The user typed "kg"
    ConvertKg();
} else { // The user typed neither "lb" nor "kg"
    Console.WriteLine("Your input was neither lb nor kg");
}

問題是變量lb沒有初始化。 它沒有你可以比較的價值。 我已更改您的代碼以解決此問題。 接下來的步驟是獲取用戶在單元之前輸入的“數字”,並將其傳遞給單元覆蓋 function 和 output 再次給用戶。 這將留給你做;)

class Program
{
    static void Main(string[] args)
    {
        //string lb, kg;
        //string userInput = "";

        Console.Write("Enter either lb or kg:");
        string input = Console.ReadLine();
        string unit = input.Substring(input.Length-2);

        if (unit == "lb") // where the error occurs
        {
            int k = ConvertNumber();
            Console.WriteLine(k + "kg");
            //k.ConvertLb();
        }
        else if (unit == "kg")
        {
            int l = ConvertNumber();
            Console.WriteLine(l + "lb");
            //l.ConvertKg();

        }
        else
        {
            Console.WriteLine("invalid unit");
        }
        Console.ReadLine();
    }

    static int ConvertNumber()
    {
        Console.WriteLine("convert");
        return 123;
    }
}

正如評論所提到的,您必須使用“lb”初始化lb變量,或者將 userInput 直接與字符串“lb”進行比較,因為 Rakesh 在評論中寫道。 我還看到您沒有閱讀用戶輸入。

下面我創建了一個快速示例代碼,它應該可以完成您期望的工作並且應該易於理解。

   class Program
   {
    public const string Lb = "lb"; //User options as constants
    public const string Kg = "kg";

    static void Main(string[] args)
    {
        string userInput = GetUserInput();

        try
        {
            ConvertUserInput(userInput);
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine(ex.Message); // Show error message

            userInput = GetUserInput(); // Get user input again
            ConvertUserInput(userInput);
        }

        Console.ReadLine();
    }

    private static string GetUserInput()
    {
        Console.Write("Enter either lb or kg:");

        string userInput = Console.ReadLine();
        return userInput;
    }

    private static void ConvertUserInput(string userInput)
    {
        // Guard for throwing an error when the user enters another value
        if (!IsValidUserInput(userInput))
            throw new ArgumentException("Input value is not lb or kg");

        if (ConvertFromPoundsToKg(userInput)) // where the error occurs
        {
            var k = new ConvertNumber();
            k.ConvertLb();
        }
        else
        {
            var l = new ConvertNumber();
            l.ConvertKg();
        }
    }

    /// <summary>
    /// userInput is either "lb" or "kg"
    /// </summary>
    /// <param name="userInput"></param>
    /// <returns></returns>
    private static bool IsValidUserInput(string userInput)
    {
        return ConvertFromPoundsToKg(userInput) || (ConvertFromKgToPounds(userInput));
    }

    private static bool ConvertFromKgToPounds(string userInput)
    {
        return userInput == Kg;
    }

    private static bool ConvertFromPoundsToKg(string userInput)
    {
        return userInput == Lb;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM