【问题标题】:Final Else statement will not work inside do...while loop. C#最后的 Else 语句在 do...while 循环中不起作用。 C#
【发布时间】:2014-10-16 05:03:24
【问题描述】:

好的,这是我在这里的第一篇文章,所以请放轻松! ^.^ 我对 C# 和一般编程非常陌生,我正在努力通过实验室为我的大学编程课程入门。

实验室的目的如下:

  • 提示用户以英寸为单位输入比萨饼的直径
  • 披萨直径可以输入为实数。确保 用户输入是使用 TryParse() 方法的数字
  • 当用户输入“0”作为直径时,立即结束程序,无需任何 进一步处理,消息或提示
  • 检查输入的直径是否在 12 英寸到 36 英寸(含)范围内
  • 如果条目无效,则显示错误消息并重新提示输入有效条目
  • 如果输入有效,则计算披萨面积并确定生产的最大切片数
  • 直径为 12 英寸到 20 英寸(含)的只能切成八片。
  • 直径大于 20 英寸(包括 24 英寸)的最大可切割成 12 片。
  • 直径大于 24 英寸(包括 30 英寸)最多可切割成 16 片。
  • 直径大于 30 英寸的可以切割成最多 24 片。
  • 创建一个输出格式,以显示比萨的所有可能切割配置的列表以及每个配置的切片数量和切片面积
  • 继续提示用户输入披萨直径,仍然提供 0 来结束程序
  • 在列表中显示每个输入直径的结果
  • 在每次显示新列表之前使用 Console.Clear() 清除控制台

我很难弄清楚为什么我最后的“else”语句不起作用。它与我在以前的实验室中使用的完全相同,因此代码对于我需要的内容没有错误,但是当条目不在 12-36" 之间(包括在内)时,我的 if-else 语句应该跳下来并显示我的“错误条目”消息指出它不在范围内。我的代码的其余部分工作但我不明白为什么当条目不正确时它不会显示我的 else 语句!

我目前的代码,我一直在尝试进行一些小的更改以使其正常工作:

                do
                {
                    if (double.TryParse(Console.ReadLine(), out pizzaDiameter) == false)       //
                    {
                        Console.Write("\n\tENTRY ERROR\nDiameter must be a numerical number!");                 
                        Console.Write("\n\nPlease enter the diameter of your pizza (0 to end program): ");
                        Console.ReadLine();
                    }
                    else
                    {
                        if (pizzaDiameter >= 12 && pizzaDiameter <= 36)
                        {
                            pizzaRadius = pizzaDiameter / 2;                        //Calculating the radius of the pizza by dividing diameter by 2
                            wholePizzaArea = Math.Pow(pizzaRadius, 2) * Math.PI;    //Determining the whole area of the pizza by multiplying radius^2 by pi

                            if (pizzaDiameter > 30)
                            { 
                                Console.Write("Cut in " + SMALL_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / SMALL_PIZZA, 2) + "\" per slice");
                                Console.Write("\nCut in " + MEDIUM_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / MEDIUM_PIZZA, 2) + "\" per slice");
                                Console.Write("\nCut in " + LARGE_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / LARGE_PIZZA, 2) + "\" per slice");
                                Console.Write("\nCut in " + EXTRA_LARGE_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / EXTRA_LARGE_PIZZA, 2) + "\" per slice");
                            }
                            else if (pizzaDiameter > 24)
                            {
                                Console.Write("Cut in " + SMALL_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / SMALL_PIZZA, 2) + "\" per slice");
                                Console.Write("\nCut in " + MEDIUM_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / MEDIUM_PIZZA, 2) + "\" per slice");
                                Console.Write("\nCut in " + LARGE_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / LARGE_PIZZA, 2) + "\" per slice");
                            }
                            else if (pizzaDiameter > 20)
                            {
                                Console.Write("Cut in " + SMALL_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / SMALL_PIZZA, 2) + "\" per slice");
                                Console.Write("\nCut in " + MEDIUM_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / MEDIUM_PIZZA, 2) + "\" per slice");
                            }
                            else if (pizzaDiameter >= 12)
                            {
                                Console.Write("Cut in " + SMALL_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / SMALL_PIZZA, 2) + "\" per slice");

                            }
                        else
                        {
                            Console.Write("\n\tENTRY ERROR\n\nPizza must have a diameter in the range of 12\" to 36\" inclusive! \n\nPlease try again.");
                        }
                        }
                    }
                    Console.Write("\n\nPlease enter the diameter of your pizza (0 to end program): ");


                } while (pizzaDiameter > 0);

            }
        }
    }
}

【问题讨论】:

  • 发布完整的 do while 循环,以便我们查看
  • 你是否在考虑这个 else 声明else { Console.Write("\n\tENTRY ERROR\n\nPizza must have a diameter in the range of 12\" to 36\" inclusive! \n\nPlease try again."); }

标签: c# if-statement do-while


【解决方案1】:

你的括号好像有问题

把你的最后的 else 改成这个,应该会有所帮助:

                        else if (pizzaDiameter >= 12)
                        {
                            Console.Write("Cut in " + SMALL_PIZZA + " slices results in a slice area of " + Math.Round(wholePizzaArea / SMALL_PIZZA, 2) + "\" per slice");

                        }
                    }//add this bracket here
                    else
                    {
                        Console.Write("\n\tENTRY ERROR\n\nPizza must have a diameter in the range of 12\" to 36\" inclusive! \n\nPlease try again.");
                    //} remove this one
                    }

【讨论】:

  • 是的,如果最后一个else 块在原始代码中正确缩进,错误会更明显。
  • 看起来它在 OP 中正确缩进了。 else 不打算与上面的 if else 语句一起使用,而是在它们之前的 if 语句,只是一个简单的括号错误。
  • 我的建议是利用 Visual Studio IDE 的断点找出代码进入的位置!并使用自动缩进 (CTRL+K-D) 等 Visual Studio 功能来确保您的代码缩进良好。
  • 我认为这与我的支架设置有关,但仍在尝试掌握它。当我实施上面建议的更改时,它们最终给了我一堆错误,“错误 6 )预期 89 102 错误 3 ;预期 82 25 错误 7 无法将类型 'void' 隐式转换为 'bool' 89 21 PizzaPiLab3 错误 2 无效的表达式term 'else' 错误 8 只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句 错误 4 语法错误,'(' 预期 错误 5 语法错误,'while' 预期 错误 1 ​​类型或命名空间定义,或预期的文件结尾
  • 尝试删除其中一个,仔细查看代码后,看起来您可能有一个不应该存在的额外右括号。我不能确定,因为这看起来不像一个完整的功能
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2021-04-15
  • 2020-05-07
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多