1

感谢这里的社区,我能够编写我的第一个程序。但是,我仍然需要一些帮助来改进程序:

Console.WriteLine("BMI Rechner");
        Console.WriteLine("===========");
        Console.WriteLine();

        Console.Write("Körpergewicht in kg: ");
        int kg;
        kg = Convert.ToInt32(Console.ReadLine());

        Console.Write("Größe in cm: ");
        int cm;
        cm = Convert.ToInt32(Console.ReadLine());

        Console.Write("Geschlecht (m/w):");
        string Geschlecht = Console.ReadLine();
        bool Auswahl = false;

        switch(Geschlecht)
       {
        case "m":
        Auswahl = true;
        break;
        case "w":
        Auswahl = true;
        break;
        default:
        Console.WriteLine("Ungültige Eingabe");
        Console.WriteLine("(m)ännlich/(w)eiblich");
        break;
       }
        if (Auswahl != false) {Console.WriteLine("Eingabe wird verarbeitet");}


        double BMI = kg / ( (cm / 100.0) * (cm / 100.0) );

        if (BMI < 19 & Geschlecht == "w")
        { Console.WriteLine("-> Untergewicht"); }
        else if (BMI >= 19 & BMI <= 24 & Geschlecht == "w") 
        { Console.WriteLine("-> Normalgewicht"); }
        else if (BMI > 24 & Geschlecht == "w")
        { Console.WriteLine("-> Übergewicht"); }

        if (BMI < 20 & Geschlecht == "m")
        { Console.WriteLine("-> Untergewicht"); }
        else if (BMI >= 20 & BMI <= 25 & Geschlecht == "m")
        { Console.WriteLine("-> Normalgewicht"); }
        else if (BMI > 25 & Geschlecht == "m")
        { Console.WriteLine("-> Übergewicht"); }

        Console.ReadLine();

我在中间做了一个开关,以防止程序在输入错误时崩溃。它有效,我得到以下几行:

        Console.WriteLine("Ungültige Eingabe");
        Console.WriteLine("(m)ännlich/(w)eiblich");

这应该是我回到选项“m”和“w”的“循环”。但是,如果我现在输入 m/w,程序就会关闭,这意味着它根本不起作用。

我的代码中有错误还是我只是使用了错误的命令?

对于我对编程术语的掌握,我深表歉意。这是我第一次。

提前致谢!

4

1 回答 1

5

老实说,我在您的代码中看不到任何循环。

do...while您可以使用这样的循环执行您所说的操作:

do
{
  //...
}while (Geschlecht != "m" && Geschlecht != "w");

循环将do...while在每次迭代之后检查(而不是之前,这意味着它将始终至少进入循环一次)。在这种情况下,条件表示只要Geschlecht不是“m”且不是“w”,它就会循环。

将此应用于您的代码,您将获得:

//...
bool Auswahl = false;
string Geschlecht;
do
{
    Console.Write("Geschlecht (m/w):");
    Geschlecht = Console.ReadLine();

    switch(Geschlecht)
    {
        case "m":
            Auswahl = true;
            break;
        case "w":
            Auswahl = true;
            break;
        default:
            Console.WriteLine("Ungültige Eingabe");
            Console.WriteLine("(m)ännlich/(w)eiblich");
            break;
    }
}while (Geschlecht != "m" && Geschlecht != "w");

if (Auswahl != false) {Console.WriteLine("Eingabe wird verarbeitet");}
//etc...

请注意我已经从循环中取出了两个变量,它们是AuswahlGeschlecht。原因是因为两者都需要在循环之外可用,特别Geschlecht是在条件中需要。


吉米 评论说,有可能以Auswahl不再需要的方式做到这一点......这是一种方法(与其他任何方法一样有效):

//...
Console.Write("Geschlecht (m/w):");
string Geschlecht = Console.ReadLine();
while (Geschlecht != "m" && Geschlecht != "w");
{
    Console.WriteLine("Ungültige Eingabe");
    Console.WriteLine("(m)ännlich/(w)eiblich");
    Console.Write("Geschlecht (m/w):");
    Geschlecht = Console.ReadLine();
}
Console.WriteLine("Eingabe wird verarbeitet");
//etc...

在这种情况下,我们有一个while循环,循环内的代码只有在满足条件时才会执行(即在每次迭代之前验证条件)。

您也可以考虑为 Geschlecht 使用不同的数据类型,因为它具有的唯一有效值是“m”和“w”......但我离题了。


我想建议dotnetperls 上的 C# Loops Constructs 条目作为对 C# 中不同类型循环的介绍。

于 2013-10-25T06:31:19.240 回答