Хочу сделать тест в консоли, но при всех правильных ответах выдает только 4 балла(из 10). В чем заключается ошибка?

Хочу сделать тест в консоли(так как мои навыки в c# не позволяют сделать большего) и при выполнении кода все работает прекрасно за исключением того что засчитываются только 3 вопроса. Как избежать ошибки? else if пробовал. Аж страшно стало 35 проблем при else if

Вот мой код:

using System;

namespace second
{
    class Program
    {
        static void Main()  {
            byte i = 0;
            System.Console.Write("вопрос на 1 балл. 1 - прав. ответ 2 - неправ. ответ: ");
            byte a = Convert.ToByte(System.Console.ReadLine());
            if(a == 1){
                i++;
                System.Console.WriteLine(i);
            }
            System.Console.Write("вопрос на 2 балла. 1 - прав. ответ 2 - неправ. ответ: ");
            System.Console.ReadLine();
            if(a == 1){
                i+=2;
                System.Console.WriteLine(i);
            }
            System.Console.Write("вопрос на 3 балла. 2 - прав. ответ 1 - неправ. ответ: ");
            System.Console.ReadLine();
            if(a == 2){
                i+=3;
                System.Console.WriteLine(i);
            }
            System.Console.Write("вопрос на 4 балла. 1 - прав. ответ 2 - неправ. ответ: ");
            System.Console.ReadLine();
            if(a == 1){
                i+=4;
                System.Console.WriteLine(i);
            }
            System.Console.Write("вопрос на 5 баллов. 2 - прав. ответ 1 - неправ. ответ: ");
            System.Console.ReadLine();
            if(a == 2){
                i+=5;
                System.Console.WriteLine(i);
            }
            System.Console.Write("вопрос на 6 баллов. 2 - прав. ответ 1 - неправ. ответ: ");
            System.Console.ReadLine();
            if(a == 2){
                i+=6;
                System.Console.WriteLine(i);
            }
            System.Console.Write("вопрос на 7 баллов. 1 - прав. ответ 2 - неправ. ответ: ");
            System.Console.ReadLine();
            if(a == 1){
                i+=7;
            }
            System.Console.Write("вопрос на 8 баллов. 2 - прав. ответ 1 - неправ. ответ: ");
            System.Console.ReadLine();
            if(a == 2){
                i+=8;
            }
        byte d = i;
            if(d == 36)
            System.Console.WriteLine("10 баллов!");
            else if(d >=32 && d <= 35)
            System.Console.WriteLine("9 баллов");
            else if(d >=29 && d <= 31)
            System.Console.WriteLine("8 баллов");
            else if(d >=25 && d <= 28)
            System.Console.WriteLine("7 баллов");   
            else if(d >=21 && d <= 24)
            System.Console.WriteLine("6 баллов");
            else if(d >=17 && d <= 20)
            System.Console.WriteLine("5 баллов");
            else if(d >=13 && d <= 16)
            System.Console.WriteLine("4 балла");
            else if(d >=9 && d <= 12)
            System.Console.WriteLine("3 балла");
            else if(d >=5 && d <= 8)
            System.Console.WriteLine("2 балла");
            else if(d >=3 && d <= 4)
            System.Console.WriteLine("1 балл");
            else if(d >=0 && d <= 2)
            System.Console.WriteLine("0 баллов");

        }
    }
}

Ответы (1 шт):

Автор решения: Reosfire

В вашем коде, слошком много копируещегося кода, делающего по сути одно и тоже. Советую выделить метод MakeQuestion который выведет вопрос в консоль считает ответ, и в случае если он правильный - начислит баллы. Это сильно поможет избежать ошибок при копировании кода.

Так же лучше использовать содержательные названия для переменных, это поможет тем, кто читает ваш код, быстрее разобраться в нем, да и вам самим в будущем.

И да, иногда есть возможность найти математический смысл того, что вы хотите сделать, не используя кучу ветвлений.(последняя строка в Main)

using System;

namespace second
{
    class Program
    {
        static int score = 0;
        static void MakeQuestion(string question, string correctAnswer, int additionScore)
        {
            Console.Write($"вопрос на {additionScore} балл. ");

            Console.Write(question);
            string answer = Console.ReadLine();
            if (answer == correctAnswer) score += additionScore;
            Console.WriteLine(score);
        }
        static void Main()
        {
            MakeQuestion("1 - прав. ответ 2 - неправ. ответ: ", "1", 1);
            MakeQuestion("1 - прав. ответ 2 - неправ. ответ: ", "1", 2);
            MakeQuestion("2 - прав. ответ 1 - неправ. ответ: ", "2", 3);
            MakeQuestion("1 - прав. ответ 2 - неправ. ответ: ", "1", 4);
            MakeQuestion("2 - прав. ответ 1 - неправ. ответ: ", "2", 5);
            MakeQuestion("2 - прав. ответ 1 - неправ. ответ: ", "2", 6);
            MakeQuestion("1 - прав. ответ 2 - неправ. ответ: ", "1", 7);
            MakeQuestion("2 - прав. ответ 1 - неправ. ответ: ", "2", 8);

            Console.WriteLine((int)(score / 3.6));
        }
    }
}
→ Ссылка