4

Visual Studio 一直在说Use of unassigned variableforiValiNumber. 谁能告诉我哪里出错了?

这是一个代码,要求用户继续输入整数并将它们相加,直到用户想要停止。然后整数的总和显示在控制台上。

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

您需要初始化iNumberiVal。想想while在你当前的代码中,他们第一次通过循环会有什么价值。

于 2012-11-04T14:39:42.007 回答
3

您的 iVal 参数在您的 while 循环中未分配。您需要在初始化时给出一个值。

于 2012-11-04T14:39:49.780 回答
0

正如您在第一次使用 iNumber 或 iVal 之前(在您的 while 语句中)之前未为 iNumber 或 iVal 分配值的几个地方所指出的那样。在这种特殊情况下,它是良性的,并分配默认值来改变事物。这个错误虽然是适当的。在允许使用未分配变量的语言中,历史上未分配的变量一直是一个令人头疼的问题。特别是在不将存储位置初始化为默认值的语言中。在这种情况下,C# 确实会初始化为默认值,但它仍可能导致难以发现错误。编译器足够聪明,可以在到达本地的特定用途之前检查代码所采用的路径,如果你可以在不分配值的情况下到达那里,它会抱怨。

于 2013-01-31T11:36:24.070 回答