为什么我会得到"使用未分配的本地变量#34;?

时间:2016-06-20 22:19:48

标签: c# if-statement

我创建了一个简单的程序,用户必须回答一些问题并最终看到他有多少信用。答案应该是“是”或“否”。最近(在我完成程序并且工作正常后),我注意到有一个方法ToUpper()。所以我想在我的程序中输入它。我使用if语句来使用传输是或否,因为我不能这样写:if(answer1 == yes),我已存储"是"在一个名为s的字符串中。它有效,但我现在无法使用s.ToUpper。所以我不得不从if语句改为switch语句,一切都没有问题,除了那个未分配的局部变量,它存储了每个问题有多少信用。错误在g = i1 + i2 + i3 + i4 + i5。那些"我"没有价值。谁能帮我?如果有一种方法可以使用ToUpper和if语句,我不介意再次使用它。这是我的代码:

int p = 0;
        int i1;
        int i2;
        int i3;
        int i4;
        int i5;
        int g;
        int qu1 = 10;
        int qu2 = 20;
        int qu3 = 20;
        int qu4 = 25;
        int qu5 = 25;
        Console.WriteLine("Calculating the probability of being diabete patient, please answer by yes or no");
        Console.Write("What is your name ? \n");
        string username = Console.ReadLine();
        Console.Write("Do you smoke ? \n");
        string answer1 = Console.ReadLine();
        switch(answer1.ToUpper())
        {
            case "YES":
                i1 = p + qu1;
                break;
            case "NO":
                i1 = p + 0;
                break;
        }

        Console.Write("do one of your parents have diabetes ? \n");
        string answer2 = Console.ReadLine();
        switch (answer2.ToUpper())
        {
            case "YES":
                i2 = p + qu2;
                break;
            case "NO":
                i2 = p + 0;
                break;
        }

        Console.Write("do u eat ? \n");
        string answer3 = Console.ReadLine();
        switch (answer3.ToUpper())
        {
            case "YES":
                i3 = p + qu3;
                break;
            case "NO":
                i3 = p + 0;
                break;
        }
        Console.Write("do u drink ? \n");
        string answer4 = Console.ReadLine();
        switch (answer4.ToUpper())
        {
            case "YES":
                i4 = p + qu4;
                break;
            case "NO":
                i4 = p + 0;
                break;
        }

        Console.Write("do u speak ? \n");
        string answer5 = Console.ReadLine();
        switch (answer5.ToUpper())
        {
            case "YES":
                i5 = p + qu5;
                break;
            case "NO":
                i5 = p + 0;
                break;
        }

        g = i1 + i2 + i3 + i4 + i5;
        Console.WriteLine(username + "," + "your percentage of gtting diabetes is {0}", g + "%");
        if (g == 100)
        {
            Console.WriteLine("You need to take care, and try to follow a healthy lifestyle and stop smoking");
        }
        if (g >= 50)
        {
            Console.WriteLine("Pay attention, you are no longer in the safe zone");
        }
        if (g <= 50)
        {
            Console.WriteLine("You are in the safe zone, but you can decrease the percentage if you take a little bit care of your health");
        }
        Console.ReadKey();

3 个答案:

答案 0 :(得分:2)

您的switch个语句都没有默认路径,因此,如果answer中的任何"YES"既不是"NO"也不是i,那么相应的i将被取消分配。提供default的默认值或让您的开关具有switch(answer){ case "YES": // case body case "NO": // case body default: i = 0; } 条款:

red_shield = pyg.image.load(r'images\red shield.png')
red_shield2 = pyg.image.load('images/red shield.png')
red_shield3 = pyg.image.load('images\\red shield.png')

答案 1 :(得分:1)

您的default:语句中没有任何switch语句,因此编译器会告诉您,如果用户键入“NOPE”作为答案1,则它不知道该怎么做。

你应该使用if / else,或者你需要添加类似

的东西
default:
case "NO":

如果有人输入其他内容,则将“否”设为默认答案。

见相关:What should every programmer know about security? “绝不信任用户输入”

答案 2 :(得分:0)

这可能会出现在下面的代码部分中,因为代码i1中根本没有分配变量int i1;

     case "YES":
            i1 = p + qu1;
            break;

您应该声明并将其指定为默认值,然后在Switch语句中使用

    int i1 = 0;

(OR)

    int i1 = default(int);