C# 简单的温度转换问题

C# 简单的温度转换问题,c#,C#,因此,假设用户有3个选项,从1到3。在选项3之后,将出现错误警报。我的问题是为什么这个代码给我一个无限循环?我做错了什么?我可以在每个if语句后加上break吗? 请帮忙,谢谢 您正在创建一个do…while循环,没有任何东西可以退出它。当循环开始时,ichoice已被固定。所以你永远都会被困在那个圈子里 每次调用控制台时。ReadKey您应该存储返回值。您正在接收来自用户的输入,但未将其存储在任何位置 首先,您可以创建一个函数来获取ichoice,并强制用户输入正确的值: using Sys

因此,假设用户有3个选项,从1到3。在选项3之后,将出现错误警报。我的问题是为什么这个代码给我一个无限循环?我做错了什么?我可以在每个if语句后加上break吗?
请帮忙,谢谢

您正在创建一个
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);

    }

}