2013-09-28 10 views
0

Я создаю приложение C# GUI, и у меня возникают проблемы с моим циклом, приложение получает .txt-файл со студенческими экзаменами на экзамен ответы A, B, C или D от каждого на септической линии и затем он сравнивает его с правильными ответами в массиве в коде. Моя петля всегда дает мне, что все ответы неверны, независимо от правильности ответов или неправильных ответов.Loop issue in C# Сравнение двух массивов

Мой интерфейс

enter image description hereenter image description here

Мой код:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 

namespace Mohammad_Saad_Assignment_1_Part_2_Sec_B 
{ 
public partial class Form1 : Form 
{ 
    //Acutal answers 
    string[] correctAnswers = { "B", "D", "A", "A", "C", "A", "B", "A", "C", "D", "B", 
      "C", "D", "A", "D", "C", "C", "B", "D", "A" }; 

    //Student answers array of size 20 
    string[] studentAnswers = new string[20]; 

    public Form1() 
    { 

     InitializeComponent(); 
    } 

    private void btnOpen_Click(object sender, EventArgs e) 
    { 
     listBox2.Items.AddRange(correctAnswers); 

     //Opening a new file. 
     OpenFileDialog open = new OpenFileDialog(); 
     //Dismiss user cancelation so application dosnt crash. 
     if (open.ShowDialog() == DialogResult.OK) 
     { 
      path.Text = open.FileName; 
     } 

     StreamReader sReader = new StreamReader(open.FileName); 
     int index = 0; 

     while (index < correctAnswers.Length && !sReader.EndOfStream) 
     { 
      correctAnswers[index] = sReader.ReadLine(); 
      index++; 
     } 
     foreach (string str in correctAnswers) 
     { 
      listBox1.Items.Add(str); 
     } 

     btnOpen.Enabled = false; 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     int i = 0; 
     int questionNumber = 1; 
     int answersCorrect = 0; 
     int answersIncorrect = 0; 
     do 
     { 
      if (studentAnswers[i] == correctAnswers[i]) 
      { 
       answersCorrect++; 
      } 
      if (studentAnswers[i] != correctAnswers[i]) 
      { 
       listBox3.Items.Add("Question " + questionNumber); 
       listBox3.Items.Add("Incorrect"); 
       answersIncorrect++; 
      } 
      i++; 
      questionNumber++; 
     } 

     while (i != 20); 
     lblCorrect.Text = answersCorrect.ToString(); 
     lblInCorrect.Text = answersIncorrect.ToString(); 
     if (answersCorrect >= 15) 
     { 
      txtResults.Text = "PASS"; 

     } 
     if (answersCorrect < 15) 
     { 
      txtResults.Text = "FAIL"; 

     } 

     btnMark.Enabled = false; 
    } 

    private void btnClear_Click(object sender, EventArgs e) 
    { 
     btnOpen.Enabled = true; 
     btnMark.Enabled = true; 
     listBox1.Items.Clear(); 
     listBox3.Items.Clear(); 
     txtResults.Clear(); 
    } 
} 
} 

Вопрос, я думаю, в кнопке Mark (кнопка 1) Любая помощь очень ценится.

+0

Что такое символ в вашем файле? Являются ли они UpperCase «A, B, C ...» или LowerCase «a, b, c»? – Alireza

+0

Привет Alireza, я также использую верхний регистр, спасибо – user2318228

ответ

2

Изменить этот блок кода:

while (index < correctAnswers.Length && !sReader.EndOfStream) 
{ 
    correctAnswers[index] = sReader.ReadLine(); 
    index++; 
} 
foreach (string str in correctAnswers) 
{ 
    listBox1.Items.Add(str); 
} 

к:

while (index < correctAnswers.Length && !sReader.EndOfStream) 
{ 
    studentAnswers[index] = sReader.ReadLine(); 
    index++; 
} 
foreach (string str in studentAnswers) 
{ 
    listBox1.Items.Add(str); 
} 
2

У вас есть эта линия, когда вы читаете в студенческих ответов:

correctAnswers[index] = sReader.ReadLine(); 

Оно должно быть:

studentAnswers[index] = sReader.ReadLine(); 
+0

Точно. Затем тот же массив отображается в обоих списках. Но когда он проверяет результаты, он сравнивает массив '{null, null, null, ...}' с '{" B "," D "," A ", ...}'. Несвязанное предложение - проверить содержимое файла. Строка типа '' A ''(с пробелом) из файла может привести к более тонким ошибкам. –

2

В общем, использование отладчика и выполнение кода шаг за шагом помогут вам.

Смежные вопросы