Почему после компиляции не запускается программа ? - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Проблема следующая: программа тестирования обращается к xml-файлу. Без его использования запускается, но, при его подключении виснет в процессах, но не отображается никаким образом. Не понимаю, в чем проблема.
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 VirtualTest
{
    public partial class Form1 : Form
    {
        string fpath; //путь к файлу теста 
        string fname; //файл теста
 
        //XMLReader обеспечивает чтение данных xml-файла 
        System.Xml.XmlReader xmlReader;
 
        string qw; // вопрос
 
        //варианты ответа
        string[] answ = new string[3];
 
        string pic; //путь к файлу иллюстрации
 
        int right; //правильный ответ (номер)
        int otv; //выбранный ответ (номер)
        int n; //количество правильных ответов
        int nv; //общее количество вопросов
        int mode; //состояние программы
                    // 0 - начало работыж
                    // 1 - тестированиеж
                    // 2 - завершение работы
        //конструктор формы          
 
        public Form1(string[] args)
        {
            InitializeComponent();
 
            radioButton1.Visible = false;
            radioButton2.Visible = false;
            radioButton3.Visible = false;
 
            //имя файла теста должно быть указано
            //в качестве параметра команды запуска программы
            if (args.Length > 0)
            {
                //указано только имя файла теста
                if (args[0].IndexOf(":") == -1) {
                    fpath = Application.StartupPath + "\";
                    fname = args[0];
                }
 
                else
                {
                    //указан путь к файлу теста
                    fpath =args[0].Substring(0, args[0].LastIndexOf("\") + 1);
                    fname =args[0].Substring(args[0].LastIndexOf("\") + 1);
                }
 
                try
                {
                    //прочитать xml-файл
                    xmlReader = new System.Xml.XmlTextReader(fpath + fname);
                    xmlReader.Read();
 
                    mode = 0;
                    n = 0;
 
                    //загрузить и показать заголовок теста
                    this.showHead();
                    //загрузить и показать описание теста
                    this.showDescription();
                }
                catch (Exception exc)
                {
                    label1.Text = "Ошибка доступа к файлу " +
                        fpath + fname;
 
                    MessageBox.Show("Ошибка доступа к файлу.\n" +
                        fpath + fname + "\n",
                        "Тестирование",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error);
                    mode = 2;
                }
            }
            else
            {
                label1.Text =
                    "Файл теста необходимо указать " +
                    "в команде запуска программы.\n" +
                    "Например: 'exam economics.xml' " +
                    "или 'exam c:\\spb.xml'.";
                mode = 2;
            }
        }
 
        //выводит название (заголовок) теста
        private void showHead()
        {
            //ищем узел <head>
            do xmlReader.Read();
            while (xmlReader.Name != "head");
 
            //считываем заголовок
            xmlReader.Read();
 
            //вывести название теста в заголовок окна
            this.Text = xmlReader.Value;
 
            //выводим из узла <head>
            xmlReader.Read();
        }
 
        //выводит описание теста
        private void showDescription()
        {
            //ищем узел <description>
            do
                xmlReader.Read();
            while (xmlReader.Name != "decription");
 
            //считываем описание теста
            xmlReader.Read();
            
            //выводим описание теста
            label1.Text = xmlReader.Value;
 
            //выходим из узла <description>
            xmlReader.Read();
 
            //ищем узел вопросов <qw>
            do
                xmlReader.Read();
            while (xmlReader.Name != "qw");
 
            //входим внутрь узла
            xmlReader.Read();
        }
        //читает вопрос из файла теста
        private Boolean getQw()
        {
            //считывает тег <q>
            xmlReader.Read();
            if (xmlReader.Name == "q")
            {
                //здесь прочитан тег <q>,
                //атрибут text которогосодлержит вопрос,
                //а атрубут src - имя файла иллюстрации.
 
                //извлечение значения атрибутов:
                qw = xmlReader.GetAttribute("text");
                pic = xmlReader.GetAttribute("src");
                if (!pic.Equals(string.Empty)) pic = fpath + pic;
 
                //входим внутрь узла
                xmlReader.Read();
                int i = 0;
 
                //считываем данные узла вопросов <q>
                while (xmlReader.Name != "q")
                {
                    xmlReader.Read();
 
                    //варианты ответа
                    if (xmlReader.Name == "a")
                    {
                        //если есть атрибут right, то это
                        //правильный ответ
                        if (xmlReader.GetAttribute("right") == "yes")
                            right = i;
 
                        //считываем вариант ответа 
                        xmlReader.Read();
                        if (i < 3) answ[i] = xmlReader.Value;
 
                        //выходим из узла <a>
                        xmlReader.Read();
 
                        i++;
                    }
                }
 
                //выходим из узла вопросов <q>
                xmlReader.Read();
 
                return true;
            }
            //если считанный тег не <q>
            else
                return false;
        }
 
        //выводит вопрос и варианты ответа
        private void showQW()
        {
            //выводим вопрос
            label1.Text = qw;
 
            //картиночка
            if (pic.Length !=0)
            {
 
                try
                {
                    pictureBox1.Image = new Bitmap(pic);
                    pictureBox1.Visible = true;
 
                    radioButton1.Top = pictureBox1.Bottom + 16;
                }
                catch
                {
                    if (pictureBox1.Visible)
                        pictureBox1.Visible = false;
 
                    label1.Text +=
                        "\n\n\nОшибка доступа к файлу " + pic + ".";
 
                    radioButton1.Top = label1.Bottom + 8;
                }
            }
            else
            {
                if (pictureBox1.Visible)
                    pictureBox1.Visible = false;
                radioButton1.Top = label1.Bottom;
            }
 
            //показаать варианты ответа
            radioButton1.Text = answ[0];
            radioButton2.Top = radioButton1.Top + 24;
            radioButton2.Text = answ[1];
            radioButton3.Top = radioButton2.Top + 24;
            radioButton3.Text = answ[2];
 
            radioButton4.Checked = true;
            button1.Enabled = false;
        }
      // щелчок на кнопке Ok
        private void button1_Click(object sender, EventArgs e)
        {
            switch (mode)
            {
                case 0: //начало работы программы
                    radioButton1.Visible = true;
                    radioButton2.Visible = true;
                    radioButton3.Visible = true;
 
                    this.getQw();
                    this.showQW();
 
                    mode = 1;
 
                    button1.Enabled = false;
                    radioButton4.Checked = true;
                    break;
                case 1:
                    nv++;
 
                    //правильный ли ответ выбран
                    if (otv == right) n++;
 
                    if (this.getQw()) this.showQW();
                    else
                    {
                        //больше вопросов нет
                        radioButton1.Visible = false;
                        radioButton2.Visible = false;
                        radioButton3.Visible = false;
 
                        pictureBox1.Visible = false;
 
                        //обработка и вывод результата 
                        this.showLevel();
 
                        //следующий щелчок на кнопке ок
                        //закроет окно программы
                        mode = 2;
                    }
                    break;
                case 2:   //завершение работы программы
                    this.Close(); //закрыть окно
                    break;
            }
        }
 
       // щелчок на кнопке выбора ответа
           // функция обрабатывает событие Click
           // компонентов radioButton1 - radioButton3
        private void radioButton1_Click(object sender, EventArgs e)
        {
            if ((RadioButton)sender == radioButton1) otv = 0;
            if ((RadioButton)sender == radioButton2) otv = 1;
            if ((RadioButton)sender == radioButton3) otv = 2;
 
            button1.Enabled = true;
        }
 
        //выводит оценку
        private void showLevel()
        {
            //ищем узел <levels>
            do
                xmlReader.Read();
            while (xmlReader.Name != "levels");

            //входим внутрь узла
            xmlReader.Read();
 
            //читаем данные узла
            while (xmlReader.Name != "levels")
            {
                xmlReader.Read();
 
                if (xmlReader.Name == "level")
                    //n кол-во правильных ответов,
                    //проверяем, попадаем ли в категорию
                    if (n >= System.Convert.ToInt32(xmlReader.GetAttribute("score")))
                        break;
            }
 
            //выводим оценку
            label1.Text = "Тестирование завершено.\n" +
                          "Всего вопросов: " + nv.ToString() + ". " +
                          "Правильных ответов: " + n.ToString() + ". " +
                          xmlReader.GetAttribute("text");
        }
    }
}

Решение задачи: «Почему после компиляции не запускается программа ?»

textual
Листинг программы
while (xmlReader.Name != "decription");

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы