私の教授は、ユーザーの身長と体重をとり、bmiを計算するプログラムを作成するよう依頼しました。私はもう少しそれを取って、いくつかの "入力検証"ロジックを追加しました。これは、誰かが体重を「猫」と入力すると、「猫」が有効な体重ではないことを知らせることを意味します。C#でスコープ外の変数を参照する方法
class MainClass
{
public static void Main()
{
float userWeight;
float userHeight;
bool weight = true;
Console.Write ("Weight: ");
while (weight)
{
var inputWeight = (Console.ReadLine());
if (!float.TryParse (inputWeight, out userWeight)) {
Console.WriteLine ("Invalid input");
Console.Write ("Please try again: ");
}
else
{
weight = false;
}
}
bool height = true;
Console.Write ("Height: ");
while (height)
{
var inputHeight = (Console.ReadLine());
if (!float.TryParse (inputHeight, out userHeight)) {
Console.WriteLine ("Invalid input");
Console.Write ("Please try again: ");
}
else
{
height = false;
}
}
float bmiHeight = userHeight * userHeight; // error for userHeight
float bmi = userWeight/bmiHeight * 703; // error for userWeight
Console.WriteLine ("You BMI is " + bmi);
}
}
エラーは「未割り当てのローカル変数の使用」です。私は、ユーザー変数をIFステートメント内に割り当てていること、そしてそれらがそのIFステートメントの終わりまでしか持続しないことを知っています。
私の質問は、ifステートメントに変数を代入し、そのステートメントの外でその変数の新しい値を参照する方法です。
それは退屈そうなので確かに、私は、巣にそれらすべてを持っていない....
実際にコードを見ると、これは誤った記述です。この特定のケースで価値を初期化するための良い提案は、同じ目的を別のコードで表現するより良い方法があるので必要ではありません。 –
しかし、コードに基づいて変数は最終的には初期化されますが、コンパイラはそれを実現するほどスマートではありません。そして、そういうコードを書く良い方法があるのは事実です。 – Lincoln
私のuserWeightとuserHeight変数を0に設定しました!ありがとう! – Killzone