【发布时间】:2019-08-02 15:21:58
【问题描述】:
我是编写代码的新手,我了解一些,但我无法使某些事情发挥作用。
我希望这能让用户在授予他们访问权限之前先选择一个类别,但我收到错误消息“使用未分配的局部变量”。我是不是做错了什么?
public static void Main(string[] args)
{
bool CalculateSavings, Grades;
if (CalculateSavings == true)
{
int MySavings, Allowance, Food, Transportation, WeeklySavings, MonthlySavings;
Console.WriteLine("Input your daily allowance:");
Allowance = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Input your daily food expenses:");
Food = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Input your daily transportation expenses:");
Transportation = Convert.ToInt32(Console.ReadLine());
{
MySavings = Allowance - (Food + Transportation);
Console.WriteLine("Your calculated daily savings: {0}", MySavings);
WeeklySavings = MySavings * 5;
Console.WriteLine("Your calculated weekly savings: {0}", WeeklySavings);
MonthlySavings = WeeklySavings * 4;
Console.WriteLine("Your calculated monthly savings: {0}", MonthlySavings);
Console.ReadKey();
}
}
else if (Grades == true)
{
double Filipino, English, Science, Math, History, Average;
Console.WriteLine("Input grade in Filipino subject:");
Filipino = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Input grade in English subject:");
English = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Input grade in Science subject:");
Science = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Input grade in Math subject:");
Math = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Input grade in History subject:");
History = Convert.ToDouble(Console.ReadLine());
Average = (Filipino + English + Science + Math + History) / 5;
Console.WriteLine("Overall grade average: {0}", Average);
Console.ReadLine();
}
}
}
}
让用户在授予他们访问权限之前先选择一个类别,但我收到错误消息“使用未分配的局部变量”。
【问题讨论】:
-
你在声明
if (CalculateSavings == true)和Grades中使用CalculateSavings在声明else if (Grades == true)但它们都没有被初始化,只是声明。 -
哪一行报错?
-
你声明了布尔变量
bool CalculateSavings,Grades,但你没有初始化它们。好吧,因为这些是值类型,所以它们由运行时初始化。但是编译器想保护你免受粗心的错误,因为他确定你在使用之前没有赋值。 -
您总是必须在使用该值之前对其进行初始化。这适用于从最低的汇编程序级别到 .NET。更多“金属”语言”只会盲目地获取那些碰巧写入这些内存位置的位(从最后写入的任何内容),但 .NET 编译器在防止问题方面更加主动。
标签: c# if-statement unassigned-variable