Использование неназначенной локальной переменной в while условие и «Не удается выполнить запись в закрытый TextWriter».

#c#

#c#

Вопрос:

Я пробовал этот код, но продолжаю использовать неназначенную локальную переменную MAX_VALUE при условии while.(Теперь это исправлено) Но теперь получаем «Невозможно выполнить запись в закрытый TextWriter». для строки записи в выходной файл. Пожалуйста, помогите

     private void buttonCalculate_Click(object sender, EventArgs e)
    {
        double kmph;
        double MAX_VALUE;

        if (double.TryParse(textBoxSpeed.Text, out kmph) amp;amp; (double.TryParse(textBoxHours.Text, out MAX_VALUE)))

        outputFile = File.CreateText("Output.txt");

        int count = 1;

        while (count <= MAX_VALUE)
        {
            outputFile.WriteLine("After hour "   count   "the distance traveled is "   kmph * count   "Km.");

            count = count   1;

            outputFile.Close();

            MessageBox.Show("Outputs are saved to Output.txt file.");
        }
    }

    private void buttonExit_Click(object sender, EventArgs e)
    {
        this.Close();
  

Комментарии:

1. Разве вы не пропускаете фигурные скобки после вашего if (double.TryParse(... утверждения?

2. Если double.TryParse(textBoxSpeed.Text, out kmph) возвращает false MAX_VALUE , не будет присвоено никакого значения. Вот почему вы получаете это сообщение. Я думаю, вам следует объявить double MAX_VALUE = 0.0;

Ответ №1:

Вы пропускаете { после оператора if, поэтому ваш код, использующий неназначенную переменную, всегда будет выполняться и выдавать исключение:

         //I'm not sure if you want to continue writing or every time you enter the function rewrite the file...
        //This is an example in case you want to continue writing
        var filePath = "C:\myPath";
        if (!File.Exists(filePath))
        {
            //If file doesn't exist create one
            File.CreateText(filePath);
        }

        var outputFile = File.AppendText(filePath); //open file to write

        if (double.TryParse(textBoxSpeed.Text, out kmph) amp;amp; (double.TryParse(textBoxHours.Text, out MAX_VALUE)))
        {

            outputFile = File.CreateText("Output.txt");

            int count = 1;

            while (count <= MAX_VALUE)
            {
                outputFile.WriteLine("After hour "   count   "the distance traveled is "   kmph * count   "Km.");

                count = count   1;


                MessageBox.Show("Outputs are saved to Output.txt file.");
            }

            outputFile.Flush();
            outputFile.Close();
        }
  

Комментарии:

1. Я вижу, что я пропустил, Спасибо, но теперь программа не хочет записывать строки в выходной файл. Я получаю это сообщение «Не удается выполнить запись в закрытый TextWriter».

2. @Anastasia Это потому, что вы закрываете outputfile после первой итерации цикла while. Я отредактировал свой ответ и поставил Close() after the while . Посмотрите и скажите мне, сработало ли это 🙂

3. @Anastasia Вы могли бы использовать цикл for вместо цикла while и подсчитывать итерации внутри… Но это просто дело вкуса

4. @Anastasia вы уверены, что выбрали правильный путь? Передайте весь путь, а не только имя файла. Должен ли я отредактировать ответ?

5. @Anastasia Я нашел ошибку… Вам нужно выполнить a outputFile.Flush(); перед закрытием файла. Сработало ли это?