我的任务如下。
某项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
创建一个程序:
然后程序应显示正确答案的总数,不正确答案的总数以及显示错误答案问题的问题编号的列表。
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();
}
}
}
我遇到的问题是我似乎无法输出显示错误回答问题的问题编号的列表。
编辑:我遇到的问题是我确保答案密钥和响应文件都具有相同的信息,因此程序应该通过传递并且没有错误的答案。正在发生的事情是程序说只有1个正确的答案,然后它也没有列出sttd不正确的答案。
答案 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)
然后才执行循环和比较