c#在计算器中的位置计数器

时间:2014-06-16 01:18:31

标签: c# position text-files streamreader

开发一个小测验应用程序,到目前为止我有一个包含两个示例问题的文本文件,看看我是否可以在添加更多之前使其正常工作。有5个难度增加的问题级别,每个级别包含10个问题

我使用流读取器从文本文件中读取我的1级问题,它会正确读取第一个问题,程序会读取用户输入并将其与答案进行比较。如果正确,用户将移动到下一级别,但如果不正确,我希望程序询问文件中的第二个问题 - 但它继续读取第一个问题。

我有

static int pos = 0; 

作为读者的位置计数器,但每当我尝试在读者中解决我的结构时包含位置

_question1[pos].q_No = Convert.ToInt32(sreader.ReadLine());

我收到错误消息:

Cannot apply indexing with [] to an expression of type 
'Quiz_Application.Program.question1'

变量n:

static question1[] _questions1 = new question1[10];
static question2[] _questions2 = new question2[10];
static question3[] _questions3 = new question3[10];
static question4[] _questions4 = new question4[10];
static question5[] _questions5 = new question5[10];

static int score = 0;
static int asked = 0;
static int pos = 0;
static int user_input = 0;
static int user_level = 1;

struct question1
{
    public int q_No; 
    public string Question;
    public string Choices;
    public int Answer;
}

我的读者:

static void QuestionReader_Level1()
{
    Console.Clear();
    question1 _question1 = new question1();

    string filename = @"C:\Users\Craigo\Desktop\Quiz_Application\Files\question1.txt";

    while (user_level == 1)
    {
        using (StreamReader sreader = new StreamReader(filename, true))
        {
            pos += 1;
            asked += 1;

            _question1.q_No = Convert.ToInt32(sreader.ReadLine());
            Console.WriteLine(_question1.q_No);
            _question1.Question = sreader.ReadLine();
            Console.WriteLine(_question1.Question);
            _question1.Choices = sreader.ReadLine();
            Console.WriteLine(_question1.Choices);
            _question1.Answer = Convert.ToInt32(sreader.ReadLine());
            user_input = Convert.ToInt32(Console.ReadLine());

            if (user_input == _question1.Answer)
            {
                score += 1;
                user_level += 1;
                Console.WriteLine("\nCongratulations, you have scored 1 point and advanced to level 2");
                Console.WriteLine("Score = {0}, Questions Asked = {1}", score, asked);
            }
        }
    }
}

我该怎么办?

2 个答案:

答案 0 :(得分:0)

变量“_question1”不是数组: question1 _question1 = new question1();

所以,当你有“_question1 [pos]”时,它将不起作用。

你的数组是“_questions1”(你错过了's'): question1 [] _questions1 = new question1 [10];

_questions1 [pos]应该可以工作

答案 1 :(得分:-1)

while循环仅在变量user_level为1时循环。另外,您已添加,如果用户的输入等于答案,user_level将增加1,等于2,因此,循环不会再跑。但是,程序仍然循环的事实意味着不满足条件,这告诉我们用户输入不等于答案。因此,错误可能是由文件引起的。你介意显示文件的内容吗?