C# 简单的温度转换问题
因此,假设用户有3个选项,从1到3。在选项3之后,将出现错误警报。我的问题是为什么这个代码给我一个无限循环?我做错了什么?我可以在每个if语句后加上break吗?C# 简单的温度转换问题,c#,C#,因此,假设用户有3个选项,从1到3。在选项3之后,将出现错误警报。我的问题是为什么这个代码给我一个无限循环?我做错了什么?我可以在每个if语句后加上break吗? 请帮忙,谢谢 您正在创建一个do…while循环,没有任何东西可以退出它。当循环开始时,ichoice已被固定。所以你永远都会被困在那个圈子里 每次调用控制台时。ReadKey您应该存储返回值。您正在接收来自用户的输入,但未将其存储在任何位置 首先,您可以创建一个函数来获取ichoice,并强制用户输入正确的值: using Sys
请帮忙,谢谢 您正在创建一个
do…while
循环,没有任何东西可以退出它。当循环开始时,ichoice
已被固定。所以你永远都会被困在那个圈子里 每次调用控制台时。ReadKey
您应该存储返回值。您正在接收来自用户的输入,但未将其存储在任何位置
首先,您可以创建一个函数来获取ichoice
,并强制用户输入正确的值:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConTempConversion_LeeMichelle
{
class Program
{
static void Main(string[] args)
{
double fTemp;
double cTemp;
double convertC;
double convertF;
Console.WriteLine("Welcome to the temperature conversion application");
Console.WriteLine("_________________________________________________");
Console.WriteLine("1. Fahrenheit to Celsius");
Console.WriteLine("2. Celsius to Fahrenheit");
Console.WriteLine("3. Exit");
Console.Write("Enter choice: ");
Console.ReadKey();
int ichoice = 0;
do
{
if (ichoice == 1)
{
Console.WriteLine("Enter Fahrenheit temperature: ");
fTemp = int.Parse(Console.ReadLine());
convertC = ConvertCelcius(fTemp);
Console.WriteLine(fTemp + "Fahrenheit is " + convertC + "Celsius");
Console.WriteLine("Welcome to the temperature conversion application");
Console.WriteLine("_________________________________________________");
Console.ReadKey();
}
if (ichoice == 2)
{
Console.WriteLine("Enter Celsius temperature: ");
cTemp = int.Parse(Console.ReadLine());
convertF = ConvertFahrenheit(cTemp);
Console.WriteLine(cTemp + "Celsius is " + convertF + "Fahrenheit");
Console.WriteLine("Welcome to the temperature conversion application");
Console.WriteLine("____________________________________________________");
Console.ReadKey();
}
if (ichoice == 3)
{
Console.WriteLine("Thank you for using the temperature conversion application. Please come again.");
}
else
{
Console.WriteLine("Invalid choice. Please choose again!");
}
}
while (ichoice > 3);
Console.ReadKey();
}
static double ConvertCelcius(double c){
double f;
return f= 9.0 / 5.0 * c + 32;
}
static double ConvertFahrenheit(double f) {
double c;
return c = 5.0 / 9.0 * (f - 32);
}
}
}
然后在需要做出选择时使用此功能
以下是您的程序的工作版本:
static void GetChoice(ref int ichoice)
{
string input = Console.ReadLine();
Console.Write("Enter choice: ");
bool result = int.TryParse(input, out ichoice);
if (!result)
{
while (!result && ichoice > 3)
{
Console.WriteLine("Invalid value.Try again:");
input = Console.ReadLine();
result = int.TryParse(input, out ichoice);
}
}
}
double-fTemp;
双cTemp;
双变换器;
双转换器;
Console.WriteLine(“欢迎使用温度转换应用程序”);
控制台.WriteLine(“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
控制台。写入线(“1华氏度到摄氏度”);
控制台。写线(“2摄氏度到华氏度”);
控制台写入线(“3.退出”);
int-ichoice=0;
GetChoice(参考ichoice);
做
{
如果(ichoice==1)
{
控制台写入线(“输入华氏温度:”);
fTemp=int.Parse(Console.ReadLine());
convertC=ConvertCelcius(fTemp);
控制台写入线(fTemp+“华氏度为”+convertC+“摄氏度”);
Console.WriteLine(“欢迎使用温度转换应用程序”);
控制台.WriteLine(“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
GetChoice(参考ichoice);
}
if(ichoice==2)
{
Console.WriteLine(“输入摄氏温度:”);
cTemp=int.Parse(Console.ReadLine());
控制台写入线(cTemp+“摄氏度为”+cTemp+“华氏度”);
Console.WriteLine(“欢迎使用温度转换应用程序”);
控制台.WriteLine(“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
GetChoice(参考ichoice);
}
if(ichoice==3)
{
WriteLine(“感谢您使用温度转换应用程序。请再来。”);
}
其他的
{
Console.WriteLine(“选择无效。请重新选择!”);
}
}
而ichoice<3;
}
静态双变流器(双c)
{
双f;
返回f=9.0/5.0*c+32;
}
静态双华氏度(双f)
{
双c;
返回c=5.0/9.0*(f-32);
}
下面是完整的代码:如果我是你,你永远不会给
ichoice赋值,我会这样做:
double fTemp;
double cTemp;
double convertC;
double convertF;
Console.WriteLine("Welcome to the temperature conversion application");
Console.WriteLine("_________________________________________________");
Console.WriteLine("1. Fahrenheit to Celsius");
Console.WriteLine("2. Celsius to Fahrenheit");
Console.WriteLine("3. Exit");
int ichoice = 0;
GetChoice(ref ichoice);
do
{
if (ichoice == 1)
{
Console.WriteLine("Enter Fahrenheit temperature: ");
fTemp = int.Parse(Console.ReadLine());
convertC = ConvertCelcius(fTemp);
Console.WriteLine(fTemp + "Fahrenheit is " + convertC + "Celsius");
Console.WriteLine("Welcome to the temperature conversion application");
Console.WriteLine("_________________________________________________");
GetChoice(ref ichoice);
}
if (ichoice == 2)
{
Console.WriteLine("Enter Celsius temperature: ");
cTemp = int.Parse(Console.ReadLine());
Console.WriteLine(cTemp + "Celsius is " + cTemp + "Fahrenheit");
Console.WriteLine("Welcome to the temperature conversion application");
Console.WriteLine("____________________________________________________");
GetChoice(ref ichoice);
}
if (ichoice == 3)
{
Console.WriteLine("Thank you for using the temperature conversion application. Please come again.");
}
else
{
Console.WriteLine("Invalid choice. Please choose again!");
}
}
while (ichoice < 3);
}
static double ConvertCelcius(double c)
{
double f;
return f = 9.0 / 5.0 * c + 32;
}
static double ConvertFahrenheit(double f)
{
double c;
return c = 5.0 / 9.0 * (f - 32);
}
添加int.TryParse(Console.ReadKey().ToString(),out-ichoice)代码>您拥有的任何地方Console.Readline()
。这样做的目的是获取用户输入并将其转换为整数(如果不是整数,则值为0)
还应添加以下内容:
int ichoice = 0;
int.TryParse(Console.ReadKey().ToString(), out ichoice );
do
{
if (ichoice == 1)
{
Console.WriteLine("Enter Fahrenheit temperature: ");
fTemp = int.Parse(Console.ReadLine());
convertC = ConvertCelcius(fTemp);
Console.WriteLine(fTemp + "Fahrenheit is " + convertC + "Celsius");
Console.WriteLine("Welcome to the temperature conversion application");
Console.WriteLine("_________________________________________________");
int.TryParse(Console.ReadKey().ToString(), out ichoice );
最后,删除这个(我不太确定它是做什么用的…)
当您需要在出现状况之前做一些准备工作时,最直接的方法是将循环与单独的结构相结合
这是循环条件位于循环开始时使用的格式:
while (ichoice > 3);
Console.ReadKey();
prep work
while (condition) // if false then loop body will never run
{
loop body
}
这是循环条件位于循环末尾时使用的格式:
while (ichoice > 3);
Console.ReadKey();
prep work
while (condition) // if false then loop body will never run
{
loop body
}
在本例中,您在每次迭代之前都要做一些准备工作——您希望每次都能从用户那里获得按键。为此,我建议从“代码完成”开始执行以下操作:
在您的情况下,它看起来像:
while (true) // loop termination condition is inside the loop
{
prep work
if (condition)
{
break;
}
loop body
}
也可以考虑更改< <代码> > s > <代码> >如果S;否则,即使您经历了一个案例,您也会重复检查条件。
您应该为iChoice指定一个值。并将while设置为读取终止字符。比如:
Console.Write("Enter choice: ");
while (true) // loop termination condition is inside the loop
{
Console.ReadKey();
if (ichoice == 3)
{
Console.WriteLine(...);
break;
}
...
}
在代码的诸多问题中,您似乎没有在任何地方设置ichoice
。用户输入在哪里?您没有从console为Ichoice分配值。readkey()但是Ichoice
被初始化为0,这将在1次迭代后终止循环。我们似乎在OP的代码中遗漏了一些东西…@dvnrrs:否,它将触发最终的else
,这将显示“无效选择”消息并循环回do的开始处。。。而(ichoice>3)失败,循环退出。任何地方都没有“continue”,没有提供字符值(ASCII码)的KeyChar。更像是ReadLine()和int.Parse().Console.Read似乎更合适谢谢,我终于弄好了。。。谢谢你的帮助大卫,这是一个循环。。。假设我的选择是4,那么循环将停止并提醒用户输入错误。@Michelle,这不是你想要的吗?当输入值为4时,您希望发生什么情况?当输入值大于3时,将显示一条警告消息,表示选择错误,请重试。。我昨晚调整了我的代码,它似乎工作得很好。。不管怎样,谢谢您的帮助,我真的很感激。@Michelle,您应该将对您帮助最大的一个标记为答案,或者您可以自己回答,以便将来的用户知道您是如何解决问题的。请向用户发送消息以选择选项或输入0结束。
namespace YourNameSpace
{
static void Main(string[] args)
{
double fTemp;
double cTemp;
double convertC;
double convertF;
int iChoice;
Console.WriteLine("Welcome to the temperature conversion application");
Console.WriteLine("_________________________________________________");
Console.WriteLine("1. Fahrenheit to Celsius");
Console.WriteLine("2. Celsius to Fahrenheit");
Console.Write("Enter choice(0 to exit): ");
iChoice = Console.Read();
do{
switch(iChoice)
{
case 1:
Console.WriteLine("Enter Fahrenheit temperature: ");
fTemp = int.Parse(Console.ReadLine());
convertC = ConvertCelcius(fTemp);
Console.WriteLine(fTemp + "Fahrenheit is " + convertC + "Celsius");
case 2:
Console.WriteLine("Enter Celsius temperature: ");
cTemp = int.Parse(Console.ReadLine());
convertF = ConvertFahrenheit(cTemp);
Console.WriteLine(cTemp + "Celsius is " + convertF + "Fahrenheit");
}
Console.WriteLine("Welcome to the temperature conversion application");
Console.WriteLine("_________________________________________________");
Console.WriteLine("1. Fahrenheit to Celsius");
Console.WriteLine("2. Celsius to Fahrenheit");
Console.Write("Enter choice(0 to exit): ");
iChoice = Console.Read();
}while(iChoice != 0);
}
static double ConvertCelcius(double c){
double f;
return f= 9.0 / 5.0 * c + 32;
}
static double ConvertFahrenheit(double f) {
double c;
return c = 5.0 / 9.0 * (f - 32);
}
}