我有一个哨兵 while 循环,里面有 if 语句,我想跳出 if 语句而不跳出 while 循环 C#

时间:2021-02-07 00:02:25

标签: c#

我应该只使用一个哨兵 while 循环来完成任务。用户应该输入一个部门代码,对于每个部门代码,它应该获得一个分数,然后在结束 while 循环退出时计算平均值。我的问题是我可以在 while 循环内中断一个 If 语句而不中断 while 循环本身吗?一旦按下 Q 退出程序?

            Console.WriteLine("Enter a department code: ‘C’ or ‘c’ for Computer Science,‘M’ or " +
             "‘m’ for Math, ‘B’ or ‘b’ for Business Admin, or enter ‘Q’ or ‘q’ to quit => C");

            char deptCode = Console.ReadKey().KeyChar;

            while (char.ToUpper(deptCode) != 'Q')
            {

                if (char.ToUpper(deptCode) == 'C')
                {
                    Console.WriteLine("\nEnter the mark (>= 0 or <= 100)");
                    computerScienceMark = Convert.ToInt32(Console.ReadLine());
                    break;
                }


                else if (char.ToUpper(deptCode) == 'B')
                {
                    Console.WriteLine("\nEnter the mark (>= 0 or <= 100)");
                    businessMark = Convert.ToInt32(Console.ReadLine());
                    break;
                }


                else if (char.ToUpper(deptCode) == 'M')
                {
                    Console.WriteLine("\nEnter the mark (>= 0 or <= 100)");
                    mathMark = Convert.ToInt32(Console.ReadLine());
                    break;
                }

                if (char.ToUpper(deptCode) == 'Q')
                {
                    Console.WriteLine("you entered Q to quit");
                    Environment.Exit(0);
                }

                else
                {
                    Console.WriteLine("\nYou entered a wrong input please try again");
                    break;
                }

            }

3 个答案:

答案 0 :(得分:1)

你可以把对部门代码的整个请求放在一段时间内。
这样,用户将被要求输入新代码,直到他们输入“Q”,就像这样

while (true)
{
    Console.WriteLine("Enter a department code: ‘C’ or ‘c’ for Computer Science,‘M’ or ‘m’ for Math, ‘B’ or ‘b’ for Business Admin, or enter ‘Q’ or ‘q’ to quit => C");

    char deptCode = Console.ReadLine()[0];
    
    if (char.ToUpper(deptCode) == 'Q')
        break;
    
    if (char.ToUpper(deptCode) == 'C')
    {
        Console.WriteLine("\nEnter the mark (>= 0 or <= 100)");
        computerScienceMark = Convert.ToInt32(Console.ReadLine());
    }
    else if (char.ToUpper(deptCode) == 'B')
    {
        Console.WriteLine("\nEnter the mark (>= 0 or <= 100)");
        businessMark = Convert.ToInt32(Console.ReadLine());
    }
    else if (char.ToUpper(deptCode) == 'M')
    {
        Console.WriteLine("\nEnter the mark (>= 0 or <= 100)");
        mathMark = Convert.ToInt32(Console.ReadLine());
    }
    else
    {
        Console.WriteLine("\nYou entered a wrong input please try again");
    }
}

https://www.jdoodle.com/iembed/v0/8Wi

答案 1 :(得分:1)

你想要两个循环。一个外层获得部门代码,一个内层获得标记。类似的东西:

static void Main(string[] args)
{
    while (true) // outer loop
    {
        string department;

        Console.WriteLine("Enter department code:");
        department = Console.ReadLine().ToUpper();

        if (department == "Q")
        {
            break; // end the outer loop
        }
        else if (department == "C"
                  || department == "B"
                   || department == "M")
        {
            while (true) // inner loop
            {
                int mark;

                Console.WriteLine("Enter mark:");
                if (int.TryParse(Console.ReadLine(), out mark)
                    && mark >= 0
                    && mark <= 100))
                {
                    break; // end the inner loop;
                }
                else
                {
                    Console.WriteLine("Invalid mark. Try again.");
                }
            }
        }
        else
        {
            Console.WriteLine("Invalid department code. Try again.");
        }
    }
}

要结束外循环,请检查 department 是否为 "Q"break。对于正确输入 break 时的内部 mark。您可以使用 int.TryParse() 检查输入的字符串是否真的代表该检查的整数。

答案 2 :(得分:0)

            bool check = false;
        while (check == false)
        {
            Console.WriteLine("Enter a department code: ‘C’ or ‘c’ for Computer Science,‘M’ or ‘m’ " +
                "for Math, ‘B’ or ‘b’ for Business Admin, or enter ‘Q’ or ‘q’ to quit => C");
            
            char deptCode = Console.ReadLine()[0];

            if (char.ToUpper(deptCode) == 'Q')
            {
                check = true;
            }

            Console.WriteLine("\nEnter the mark (>= 0 or <= 100)");
            switch (char.ToUpper(deptCode))
            {
                case 'C':
                    computerScienceMark = Convert.ToInt32(Console.ReadLine());
                    check = true;
                    break;

                case 'B':
                    businessMark = Convert.ToInt32(Console.ReadLine());
                    check = true;
                    break;
                case 'M':
                    mathMark = Convert.ToInt32(Console.ReadLine());
                    check = true;
                    break;

                default:
                    Console.WriteLine("\nYou entered a wrong input please try again");
                    break;
            }
        }

一致认为,使用 break、continue、goto 等是糟糕的编程形式。 不要让我告诉你如何编程,使用你喜欢的任何东西并成为我的客人。但是,如果你是一个初学者并且想要学习可转移的技能,那么使用break真的被认为是草率的 -这是因为它可以留下“untolded up”(缺乏更好的表达方式)记忆。 我的意思是在迭代中使用 break 时。

我的灵魂与 Jack Lilhammers 非常相似,虽然我更喜欢这里的 switch 语句,但它更简洁一些。此外,对 while 条件使用独立变量是一个不错的主意,因为在执行更大更复杂的 while 循环时,这是一个很好的习惯,您可能会发现自己单步执行代码并拥有该变量可以让您很好地观察它的状态整个过程。