C#程序未正确显示输出

时间:2016-12-01 06:56:36

标签: c#

我的任务如下。

某项ITEC考试有20个多项选择题。这是正确的答案:

1. B 11. B
2. D 12. C
3. A 13. D
4. A 14. A
5. C 15. D
6. A 16. C
7. B 17. C
8. B 18. B
9. C 19. D
10. D 20. A

创建一个程序:

  1. 创建一个存储正确答案的数组(5分)。
  2. 创建一个名为Response.txt的文本文件,该文件模拟了回答问题的学生 只写字母答案,每行只写一个字母。记住你的文件必须 从A,B,C或D得到20行答案。参见下面的例子 一个 C 乙 d ç
  3. 您的程序应该读取文本文件并将答案存储在数组中
  4. 从文件中读取学生的答案并存储在数组中后,程序应该 比较数组与正确答案和数组与学生的答案和 确定有多少答案是正确的,有多少是不正确的。
  5. 程序应显示一条消息,指示学生是否通过了 考试。通过成绩是14个正确答案。
  6. 然后程序应显示正确答案的总数,不正确答案的总数以及显示错误答案问题的问题编号的列表。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace ITEC_exam
    {
        public partial class ITEC_exam : Form
        {
            public ITEC_exam()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                string line;
                int cnt = 0;
    
                //List to hold question numbers of incorrect answers
                List<int> incorrect = new List<int>();
    
                //Array to store correct answers
                string[] correctAnswers = { };
    
                //Array to store answers
                string[] answers = { };
    
                //Read the files and store answers in arrays
                System.IO.StreamReader correctFile = new System.IO.StreamReader("C:\\Users\\a_day\\Desktop\\Baker_Austin_c#_final\\ITECexam\\ITEC exam\\correctAnswers.txt");
                System.IO.StreamReader answerFile = new System.IO.StreamReader("C:\\Users\\a_day\\Desktop\\Baker_Austin_c#_final\\ITECexam\\ITEC exam\\testResult.txt");
    
                if ((line = correctFile.ReadLine()) != null)
                    correctAnswers = line.Split(' ');
    
                if ((line = answerFile.ReadLine()) != null)
                    answers = line.Split(' ');
    
                //Compare answers and compute the score
                for (int i = 0; i < 20; i++)
                {
                    if (correctAnswers.Count() > i && answers.Count() > i)
                    {
                        if (String.Compare(correctAnswers[i], answers[i]) == 0)
                            cnt++;
                        else
                            incorrect.Add(i + 1);
                    }
                }
    
                //Print Result
                if (cnt >= 15)
                    MessageBox.Show("\n\n Result: PASS");
                else
                    MessageBox.Show("\n\n Result: FAIL");
    
                //Printing score
                MessageBox.Show("\n Total number of Correct Answers: " + cnt);
                MessageBox.Show("\n Total number of Incorrect Answers: " + (20 - cnt));
    
                MessageBox.Show("\n Question numbers of incorrect answers: ");
                //Printing incorrectly answered question numbers
                foreach (int qno in incorrect)
                    MessageBox.Show(" " + qno + " ");
    
                //Closing Files
                correctFile.Close();
                answerFile.Close();
    
    
            }
        }
    }
    
  7. 我遇到的问题是我似乎无法输出显示错误回答问题的问题编号的列表。

    编辑:我遇到的问题是我确保答案密钥和响应文件都具有相同的信息,因此程序应该通过传递并且没有错误的答案。

    正在发生的事情是程序说只有1个正确的答案,然后它也没有列出sttd不正确的答案。

2 个答案:

答案 0 :(得分:0)

您可以使用StringBuilder(或只是连接字符串),如下所示:

            //Printing score
            MessageBox.Show("\n Total number of Correct Answers: " + cnt);
            MessageBox.Show("\n Total number of Incorrect Answers: " + (20 - cnt));

            var sb = new StringBuilder();
            foreach (int qno in incorrect)
                sb.Append(" " + qno + " ");

            MessageBox.Show("\n Question numbers of incorrect answers: " + sb.ToString());
            //Printing incorrectly answered question numbers

答案 1 :(得分:0)

不幸的是,您正在阅读文件中的一行。 只有在文件中有1行时,您的代码才有效。

如果您的文件中有数据列/垂直对齐方式,我建议您使用File.ReadAllLines()。它将返回string[]所有行。

string[] correctAnswers = File.ReadAllLines("filepath");
string[] answers = File.ReadAllLines("filepath");

另一件事是你的条件if (correctAnswers.Count() > i && answers.Count() > i)

如果两个文件中的订单相同,则您不需要它。你可以简单地比较它。

for循环应该运行到您尝试索引的数组的末尾。如果在下一次考试中你将有24个问题,这个循环将突破界限。因此,更安全的替代方法是使用Length属性或数组:

//Compare answers and compute the score
for (int i = 0; i < answers .Lengt; i++)
{

修改

如果文件之间不匹配,那么比较可能很危险,因此您可以检查两个数组是否具有相同的长度:

if(answers.Lenngth ==  correctAnswers.Length)

然后才执行循环和比较