2016-09-17 9 views
0

ループを開始するために温度を2回入力する必要があるループで問題が発生します。私は問題がどこにあるのか知っていると思います。私はそれをどう修正するのか分かりません。私は合計3週間コーディングしているので、私はこれで総初心者です。私はあなたが私が何を意味するか見ることができると思いC#ループに2回の入力が必要

{ 
Console.WriteLine("Enter the temperature in Fahrenheit: "); 


      int fahrenheit = int.Parse(Console.ReadLine()); 
      int celsius = FahrToCels(fahrenheit); 

      do 
      { 
       fahrenheit = int.Parse(Console.ReadLine()); 
       celsius = FahrToCels(fahrenheit); 

       if (celsius < 73) 
       { 
        Console.WriteLine(celsius); 
        Console.WriteLine("It's too cold, raise the temperature."); 
       } 

:ここ

は私が問題を抱えているコードの一部です。私がループを動作させる唯一の方法は、int.Parse(Console.ReadLine()を繰り返すことでしたが、温度を2度入力しなければならないというこの問題を解決するもう1つの修正がありますか)

本当に。誰かがこれで私を助けることができることを望ん

+0

私はこの問題を解決しました。私を助けてくれてありがとう! –

答えて

1

の場合問題は、ループの範囲外の変数にアクセスする必要があり、次にそれらを代入せずに宣言できることです。

{ 
Console.WriteLine("Enter the temperature in Fahrenheit: "); 

     int fahrenheit; 
     int celsius; 

     do 
     { 
      fahrenheit = int.Parse(Console.ReadLine()); 
      celsius = FahrToCels(fahrenheit); 

      if (celsius < 73) 
      { 
       Console.WriteLine(celsius); 
       Console.WriteLine("It's too cold, raise the temperature."); 
      } 
3

することで、共有しているものよりも、あなたのコードに多くありますが、私はあなたが必要だと思うものの中に追加する別の方法にreadlineのが動いている:

  do 
     { 
      int farenheight = getTemp(); 
      celsius = FahrToCels(fahrenheit); 

      if (celsius < 73) 
      { 
       Console.WriteLine(celsius); 
       Console.WriteLine("It's too cold, raise the temperature."); 
      } 
     } 
public int getTemp(){ 
    return int.Parse(Console.ReadLine()); 
} 
+1

なぜコードスニペットで1回だけ発生するコード行をカプセル化する関数を使用しますか?私の意見では、それは単に強化することです。しかし、関数が何らかのエラー処理を行う場合、つまり非整数の入力を解析することによって発生する例外をキャッチする場合、それは全く異なるストーリーかもしれません。 – Striezel

+0

だからこそ、私は「あなたのコードには表示されているものよりも多くのものがある」と言いました。はい、1つのライナーとしては意味がありませんが、私はOPが最小限に抑えられていると推測しています。コードは切り刻まれたように見えます。 –

1

ここでのポイントは:Console.ReadLine()を実行するたびに、プログラムはコンソールからの入力を待ちます。ループの前に1つとループの中に1つのConsole.ReadLine()があるので、ループを「開始する」ために値を2回入力する必要があります。

さらに詳しい情報:条件がループの繰り返しの後でのみチェックされるため、do-while-loopは少なくとも1回は実行されます。あなたは条件がすべてのループ反復の前に確認しますwhileループ、これを変更する場合は、あなたが期待するものを得る可能性があります:

int fahrenheit = int.Parse(Console.ReadLine()); 
int celsius = FahrToCels(fahrenheit); 

while (celsius < 73) 
{ 
    Console.WriteLine(celsius); 
    Console.WriteLine("It's too cold, raise the temperature."); 

    Console.WriteLine("Enter the temperature in Fahrenheit: "); 
    fahrenheit = int.Parse(Console.ReadLine()); 
    celsius = FahrToCels(fahrenheit); 
} 

私もそれが今あるようなコードがスローされますことを指摘したいです例外として、ユーザがintに解析できないものを入力した場合例外がtry-catch-blockで何らかの形でキャッチされない限り、通常はプログラムが終了します。

+0

また、try-catchブロックの代わりに 'int.TryParse'を使用してください。また、華氏と摂氏は整数として正確に変換されないので、おそらく二重/浮動小数点/小数として温度を宣言する方が意味があります。 – ekolis

+0

ええと、try-catch-blockは代入の一部です。これを今自分のコードに追加しました。助けてくれてありがとう! –

関連する問題