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

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

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

Доброго времени суток. Проблема следующая: программа тестирования обращается к xml-файлу. Без его использования запускается, но, при его подключении виснет в процессах, но не отображается никаким образом. Не понимаю, в чем проблема.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. namespace VirtualTest
  11. {
  12. public partial class Form1 : Form
  13. {
  14. string fpath; //путь к файлу теста
  15. string fname; //файл теста
  16. //XMLReader обеспечивает чтение данных xml-файла
  17. System.Xml.XmlReader xmlReader;
  18. string qw; // вопрос
  19. //варианты ответа
  20. string[] answ = new string[3];
  21. string pic; //путь к файлу иллюстрации
  22. int right; //правильный ответ (номер)
  23. int otv; //выбранный ответ (номер)
  24. int n; //количество правильных ответов
  25. int nv; //общее количество вопросов
  26. int mode; //состояние программы
  27. // 0 - начало работыж
  28. // 1 - тестированиеж
  29. // 2 - завершение работы
  30. //конструктор формы
  31. public Form1(string[] args)
  32. {
  33. InitializeComponent();
  34. radioButton1.Visible = false;
  35. radioButton2.Visible = false;
  36. radioButton3.Visible = false;
  37. //имя файла теста должно быть указано
  38. //в качестве параметра команды запуска программы
  39. if (args.Length > 0)
  40. {
  41. //указано только имя файла теста
  42. if (args[0].IndexOf(":") == -1) {
  43. fpath = Application.StartupPath + "\";
  44. fname = args[0];
  45. }
  46. else
  47. {
  48. //указан путь к файлу теста
  49. fpath =args[0].Substring(0, args[0].LastIndexOf("\") + 1);
  50. fname =args[0].Substring(args[0].LastIndexOf("\") + 1);
  51. }
  52. try
  53. {
  54. //прочитать xml-файл
  55. xmlReader = new System.Xml.XmlTextReader(fpath + fname);
  56. xmlReader.Read();
  57. mode = 0;
  58. n = 0;
  59. //загрузить и показать заголовок теста
  60. this.showHead();
  61. //загрузить и показать описание теста
  62. this.showDescription();
  63. }
  64. catch (Exception exc)
  65. {
  66. label1.Text = "Ошибка доступа к файлу " +
  67. fpath + fname;
  68. MessageBox.Show("Ошибка доступа к файлу.\n" +
  69. fpath + fname + "\n",
  70. "Тестирование",
  71. MessageBoxButtons.OK,
  72. MessageBoxIcon.Error);
  73. mode = 2;
  74. }
  75. }
  76. else
  77. {
  78. label1.Text =
  79. "Файл теста необходимо указать " +
  80. "в команде запуска программы.\n" +
  81. "Например: 'exam economics.xml' " +
  82. "или 'exam c:\\spb.xml'.";
  83. mode = 2;
  84. }
  85. }
  86. //выводит название (заголовок) теста
  87. private void showHead()
  88. {
  89. //ищем узел <head>
  90. do xmlReader.Read();
  91. while (xmlReader.Name != "head");
  92. //считываем заголовок
  93. xmlReader.Read();
  94. //вывести название теста в заголовок окна
  95. this.Text = xmlReader.Value;
  96. //выводим из узла <head>
  97. xmlReader.Read();
  98. }
  99. //выводит описание теста
  100. private void showDescription()
  101. {
  102. //ищем узел <description>
  103. do
  104. xmlReader.Read();
  105. while (xmlReader.Name != "decription");
  106. //считываем описание теста
  107. xmlReader.Read();
  108. //выводим описание теста
  109. label1.Text = xmlReader.Value;
  110. //выходим из узла <description>
  111. xmlReader.Read();
  112. //ищем узел вопросов <qw>
  113. do
  114. xmlReader.Read();
  115. while (xmlReader.Name != "qw");
  116. //входим внутрь узла
  117. xmlReader.Read();
  118. }
  119. //читает вопрос из файла теста
  120. private Boolean getQw()
  121. {
  122. //считывает тег <q>
  123. xmlReader.Read();
  124. if (xmlReader.Name == "q")
  125. {
  126. //здесь прочитан тег <q>,
  127. //атрибут text которогосодлержит вопрос,
  128. //а атрубут src - имя файла иллюстрации.
  129. //извлечение значения атрибутов:
  130. qw = xmlReader.GetAttribute("text");
  131. pic = xmlReader.GetAttribute("src");
  132. if (!pic.Equals(string.Empty)) pic = fpath + pic;
  133. //входим внутрь узла
  134. xmlReader.Read();
  135. int i = 0;
  136. //считываем данные узла вопросов <q>
  137. while (xmlReader.Name != "q")
  138. {
  139. xmlReader.Read();
  140. //варианты ответа
  141. if (xmlReader.Name == "a")
  142. {
  143. //если есть атрибут right, то это
  144. //правильный ответ
  145. if (xmlReader.GetAttribute("right") == "yes")
  146. right = i;
  147. //считываем вариант ответа
  148. xmlReader.Read();
  149. if (i < 3) answ[i] = xmlReader.Value;
  150. //выходим из узла <a>
  151. xmlReader.Read();
  152. i++;
  153. }
  154. }
  155. //выходим из узла вопросов <q>
  156. xmlReader.Read();
  157. return true;
  158. }
  159. //если считанный тег не <q>
  160. else
  161. return false;
  162. }
  163. //выводит вопрос и варианты ответа
  164. private void showQW()
  165. {
  166. //выводим вопрос
  167. label1.Text = qw;
  168. //картиночка
  169. if (pic.Length !=0)
  170. {
  171. try
  172. {
  173. pictureBox1.Image = new Bitmap(pic);
  174. pictureBox1.Visible = true;
  175. radioButton1.Top = pictureBox1.Bottom + 16;
  176. }
  177. catch
  178. {
  179. if (pictureBox1.Visible)
  180. pictureBox1.Visible = false;
  181. label1.Text +=
  182. "\n\n\nОшибка доступа к файлу " + pic + ".";
  183. radioButton1.Top = label1.Bottom + 8;
  184. }
  185. }
  186. else
  187. {
  188. if (pictureBox1.Visible)
  189. pictureBox1.Visible = false;
  190. radioButton1.Top = label1.Bottom;
  191. }
  192. //показаать варианты ответа
  193. radioButton1.Text = answ[0];
  194. radioButton2.Top = radioButton1.Top + 24;
  195. radioButton2.Text = answ[1];
  196. radioButton3.Top = radioButton2.Top + 24;
  197. radioButton3.Text = answ[2];
  198. radioButton4.Checked = true;
  199. button1.Enabled = false;
  200. }
  201. // щелчок на кнопке Ok
  202. private void button1_Click(object sender, EventArgs e)
  203. {
  204. switch (mode)
  205. {
  206. case 0: //начало работы программы
  207. radioButton1.Visible = true;
  208. radioButton2.Visible = true;
  209. radioButton3.Visible = true;
  210. this.getQw();
  211. this.showQW();
  212. mode = 1;
  213. button1.Enabled = false;
  214. radioButton4.Checked = true;
  215. break;
  216. case 1:
  217. nv++;
  218. //правильный ли ответ выбран
  219. if (otv == right) n++;
  220. if (this.getQw()) this.showQW();
  221. else
  222. {
  223. //больше вопросов нет
  224. radioButton1.Visible = false;
  225. radioButton2.Visible = false;
  226. radioButton3.Visible = false;
  227. pictureBox1.Visible = false;
  228. //обработка и вывод результата
  229. this.showLevel();
  230. //следующий щелчок на кнопке ок
  231. //закроет окно программы
  232. mode = 2;
  233. }
  234. break;
  235. case 2: //завершение работы программы
  236. this.Close(); //закрыть окно
  237. break;
  238. }
  239. }
  240. // щелчок на кнопке выбора ответа
  241. // функция обрабатывает событие Click
  242. // компонентов radioButton1 - radioButton3
  243. private void radioButton1_Click(object sender, EventArgs e)
  244. {
  245. if ((RadioButton)sender == radioButton1) otv = 0;
  246. if ((RadioButton)sender == radioButton2) otv = 1;
  247. if ((RadioButton)sender == radioButton3) otv = 2;
  248. button1.Enabled = true;
  249. }
  250. //выводит оценку
  251. private void showLevel()
  252. {
  253. //ищем узел <levels>
  254. do
  255. xmlReader.Read();
  256. while (xmlReader.Name != "levels");
  257.  
  258. //входим внутрь узла
  259. xmlReader.Read();
  260. //читаем данные узла
  261. while (xmlReader.Name != "levels")
  262. {
  263. xmlReader.Read();
  264. if (xmlReader.Name == "level")
  265. //n кол-во правильных ответов,
  266. //проверяем, попадаем ли в категорию
  267. if (n >= System.Convert.ToInt32(xmlReader.GetAttribute("score")))
  268. break;
  269. }
  270. //выводим оценку
  271. label1.Text = "Тестирование завершено.\n" +
  272. "Всего вопросов: " + nv.ToString() + ". " +
  273. "Правильных ответов: " + n.ToString() + ". " +
  274. xmlReader.GetAttribute("text");
  275. }
  276. }
  277. }

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

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

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


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

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

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы