2013-03-19 2 views
-1

В настоящее время я пытаюсь ввести данные в текстовый файл, используя Stream Writer и Stream Reader для вывода информации, в данном случае - Имя, Фамилия & Возраст. Затем с информацией я желая вывести это в таблицу, перечисленных ниже:Ошибки при обработке файлов

First Name   Surname    Age 
Etc     Etc     Etc 

однако у меня возникают некоторые проблемы, работая его !!

См. Мой код ниже, может ли кто-нибудь объяснить, почему я получаю следующие сообщения об ошибках?

Ошибка 1 Использование нераспределенного локального переменной 'FirstName'

Error 2 Использования нераспределенного локальных переменной 'LastName'

Ошибка 3 Использования нераспределенного локального переменный 'возраст'

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication1 
{// Start namespace 
    class Program 
    {// Start Class 
     static void Main(string[] args) 
     {// Start Main 
      // Declaration Strings 

      String firstname; // Declares Name as a String 
      String lastname; // Declares Surname as a String 
      String age; // Declares Age as a String 
      int Counter; // Declares Counter as an Integer 

      FileInfo fleNames = new FileInfo("Names.txt"); // Creates fleNames as an Object, using Names.txt as the file name 
      StreamWriter swrNames = fleNames.CreateText(); // Informs fleName to Create Text 

      for (Counter = 0; Counter < 1; Counter++) 
      { 
       Console.Write("Enter Your First Name:"); // Writes users first name using Stream Writer Command 
       firstname = Console.ReadLine(); 
       swrNames.WriteLine(firstname); // This dictates where the first name will be stored in the text file 
       swrNames.Flush(); 

       Console.Write("Enter Your Surname"); // Writes users first name using Stream Writer Command 
       lastname = Console.ReadLine(); 
       swrNames.WriteLine(lastname); // This dictates where the last name will be stored in the text file 
       swrNames.Flush(); 


       Console.WriteLine("Enter Your Age"); // Writes users first name using Stream Writer Command 
       age = Console.ReadLine(); 
       swrNames.WriteLine(age); // This dictates where the age will be stored in the text file 
       swrNames.Flush(); 
       Console.Clear(); 


      } 


      swrNames.Close(); 

      String NamesTable; 

      StreamReader swreNames = File.OpenText("Names.txt"); 

      while ((NamesTable = swreNames.ReadLine()) != null) 
      { 
       Console.WriteLine(NamesTable); 

      } 

      swreNames.Close(); 

      Console.ReadLine(); 

      FileInfo fleNamesTwo = new FileInfo("NamesTwo.txt"); 

      StreamWriter swrNamesTwo = null; 


      // ------------ CHECK APPEND TO A FILE -------------- 

      if (fleNames.Exists == true) 
      { 
       swrNames = fleNames.AppendText(); 
      } 
      else // -- Create a new text file 
      { // Declare Strings 
       String Name; // Name 
       String Surnames; // Surname 
       String Ages; // Age 
       swrNamesTwo = fleNamesTwo.CreateText(); 

       Console.Write("Enter Your First Name"); 
       Name = Console.ReadLine(); 
       swrNamesTwo.WriteLine(Name); 
       swrNamesTwo.Flush(); 

       Console.Write("Enter Your Surname"); 
       Surnames = Console.ReadLine(); 
       swrNamesTwo.WriteLine(Surnames); 
       swrNamesTwo.Flush(); 


       Console.WriteLine("Enter Your Age"); 
       Ages = Console.ReadLine(); 
       swrNamesTwo.WriteLine(Ages); 
       swrNamesTwo.Flush(); 
       Console.Clear(); 


      } 

      Console.Clear(); 


      Console.SetCursorPosition(15, 2); 

      Console.Write("--- Names Table ---"); 

      Console.SetCursorPosition(10, 4); 

      Console.Write("First Name"); 

      Console.SetCursorPosition(28, 4); 

      Console.Write("Surname"); 

      Console.SetCursorPosition(48, 4); 

      Console.Write("Age"); 

      Console.ReadLine(); 

      do 
      { 
       //Read a File a Streamreader Command 

       swrNames.WriteLine(firstname); // Reads from first name from file Names.txt 
       Console.SetCursorPosition(10, Counter + 6); // Aligns first name within table settings 

       swrNames.WriteLine(lastname); // Reads from last name from file Names.txt 
       Console.SetCursorPosition(28, Counter + 6); 

       swrNames.WriteLine(age); // Reads from age from file Names.txt 
       Console.SetCursorPosition(48, Counter + 6); 
       Console.WriteLine("{0} {1} is {2} years old", firstname, lastname, age); 


       Console.Clear(); //Clears Screen 
       Console.ReadLine(); 



      } while ((firstname = swreNames.ReadLine()) != null); //Writes out the input from the text file 
     } 
    } 
} 

Хорошо, что вы, полезные люди, заставили меня пройти мимо ошибок! Спасибо :)

Тем не менее, (всегда есть !!!) Я все еще не могу написать сценаристу/читателю потока, чтобы отобразить результаты в таблице. Я получаю таблицу, которая появляется после результатов, но таблица пуста, за исключением заголовков таблиц в их аккуратных заполнителях! ANYONE ..... :) :) :)

+0

Инициализировать переменные, чтобы обнулить или String.Empty – NoviceProgrammer

+0

вы думали о 'Initializing' строковых переменных =' string.Empty' 'строка Firstname = string.Empty; // Объявляет имя как строку ' ' string lastname = string.empty; // Объявляет фамилию как строку ' ' string age = string.empty; // De' – MethodMan

+2

Попытка понять, что это делает ... ему нужно несколько исправлений. Зачем нужен цикл: 'for (Counter = 0; Counter <1; Counter ++)'? Он будет выполняться только один раз. –

ответ

1

В C# ошибка Use of unassigned local variable означает, что вы пытаетесь использовать переменную, которой вы еще не дали значения. C#, в отличие от некоторых других языков, требует, чтобы вы гарантировали, что вы присвоили что-то (даже null) переменной, прежде чем использовать его, - оно не инициализирует переменные значениям по умолчанию (например, VB.NET) или не оставляет их значениями мусора (например, C++).

В вашем случае, firstname заполняется внутри for цикла, что означает, что это возможно, что он никогда не получает значение, если тело цикла for никогда не выполняет. Когда вы пытаетесь использовать его внутри do, возможно, он никогда не был назначен.

Чтобы решить эту проблему, наиболее распространенный способ - установить ее на null, когда вы объявите эту переменную, а это значит, что вы гарантировали, что она будет иметь что-то, когда вы ее используете. Конечно, убедитесь, что вы правильно обрабатываете то, что происходит, если переменная остается пустой до конца.

2

Вы бы начать с настройки переменных String, значение по умолчанию:

 String firstname = string.empty; 
     String lastname = string.empty; 
     String age = string.empty; 

Тогда, если ваш цикл не выполняет ваши переменные будут иметь инициализирован значение. При доступе позже в коде, ошибка не будет

ДОБАВЛЕНИЯ EDIT PER КОММЕНТАРИЕВ, инициализировать счетчик:

int Counter=0; 
+0

может также инициализировать переменную 'int', а также – MethodMan

+0

@DJ ... хорошая точка. – MikeTWebb

+0

+1 просто пытаюсь убедиться, что OP остается согласованным lol – MethodMan

0

Компилятор не достаточно умен, чтобы знать, что этот цикл:

for (Counter = 0; Counter < 1; Counter++) 

ВСЕГДА выполнят ТОЛЬКО ОДИН РАЗ. Поэтому он должен предположить, что существует вероятность того, что код вообще не будет выполняться, и в этом случае эти переменные никогда не будут инициализированы.

Если ваш цикл for ДЕЙСТВИТЕЛЬНО предназначен для выполнения только один раз, просто удалите цикл for, и переменные получат значение до их использования.

Если счетчик только для тестирования, и вы намерены выполнить for петли несколько раз, а затем инициализировать varialbes до некоторого фиктивного исходного значения (null, "" и т.д.)

0

Попробуйте очистить код (вам не нужно цикл for перед вводом пользователя, он будет выполняться только один раз в любом случае). Слегка измените свой код, чтобы вы могли проверить, что возвращает Console.ReadLine(). Кроме того, ошибка выглядит так, потому что переменные используются где-то, но они могут быть неназначены (если условие поиска не выполняется). Дайте им значение при объявлении их, и ошибка должна исчезнуть. Btw рассмотрит возможность реорганизации вашего кода и разбиение основного на один или несколько методов.

string firstname = string.empty; // And so on.. 
+0

спасибо за вашу помощь .. я туда добираюсь .. все равно не могу заставить что-нибудь появиться в моем столе! :( –

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