4

Visual Studio はUse of unassigned variableforiValとを言い続けますiNumber。誰が私が間違っているのか教えてもらえますか?

これは、ユーザーが停止するまで整数の入力と加算を続けるようユーザーに求めるコードになるように設計されています。整数の合計がコンソールに表示されます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AddFive
{
    class Program
    {
        static void Main(string[] args)
        {
           int iNumber;
           int iVal;
           int iTotal = 0;

            while (iVal > 0)
            {
                Console.WriteLine("Enter number " + iNumber);
                iVal = Convert.ToInt32(Console.ReadLine());
                iTotal = iTotal + iVal;
            }

            if (iNumber <= 0)
            {
                Console.WriteLine("Total = " + iTotal);
                iVal = Convert.ToInt32(Console.ReadLine());
                iTotal = iTotal + iVal;
            }

            Console.WriteLine("Total = " + iTotal);
            Console.WriteLine();
            Console.WriteLine("Press any key to close");
            Console.ReadKey();
        }
    }
}
4

6 に答える 6

7

これらの変数に値を割り当てます。それらを使用する前に、ローカル変数に値を割り当てる必要があります

    int iNumber = 0;
    int iVal = 0;

あなたが書いたときwhile (iVal > 0)、の値はiVal設定されていません

それらはデフォルト値に初期化されるため、インスタンス/クラス変数でのみそれを回避できます

public class Program
{
    int i; //this was not implicitly initialized to zero (0)

    public Program()
    {
        int j; //need to initialize this before use

        Console.Write(j);  //this throws "Use of unassigned variable" error
        Console.Write(i);  //this prints 0, the default value
    }
}
于 2012-11-04T14:39:40.837 に答える
5

Visual Studio は正しいです。初期化されていない変数を参照しようとしています。

これを試して:

 int iNumber = 0;
 int iVal = 0;

このようにして、変数を初期値 0 に初期化しています。元の問題は次の行で発生します。

while (iVal > 0)if (iNumber <= 0)

変数に値を与える前に変数にアクセスしようとします。

于 2012-11-04T14:39:34.503 に答える
3

C# では、変数を使用する前に変数に値を割り当てる必要があります。

例えば

 int iNumber = 0;
 int iVal = 0;
于 2012-11-04T14:39:31.563 に答える
3

とを初期化する必要がありiNumberますiValwhile現在のコードで、最初のループでどのような値が得られるかを考えてください。

于 2012-11-04T14:39:42.007 に答える
3

while ループで iVal パラメータが割り当てられていません。初期化時に値を指定する必要があります。

于 2012-11-04T14:39:49.780 に答える
0

この問題は、(while ステートメントで) 初めて使用する前に iNumber または iVal に値を代入しないといういくつかの場所で指摘されているとおりです。この特定のケースでは、それは無害であり、デフォルト値を割り当てることで何が変わるのですか。エラーは適切ですが。歴史的に割り当てられていない変数は、割り当てられていない変数の使用を許可する言語では頭痛の種でした。特に、保存場所をデフォルト値に初期化しない言語では。この場合、C# は既定値に初期化されますが、それでも見つけにくいバグにつながる可能性があります。コンパイラは、ローカルの特定の使用に到達する前にコードがたどるパスをチェックするのに十分スマートであり、値を割り当てずにそこに到達できる場合は文句を言います。

于 2013-01-31T11:36:24.070 に答える