2014-10-20 2 views
-1

У меня есть приложение, которое должно запрашивать у пользователя номер позиции, поиск по текстовому файлу, а затем отображение элемента с этим номером позиции. Однако моя программа проходит бесконечный цикл. Что я здесь делаю неправильно?Бесконечная петля в StreamReader

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

namespace Exercise 
{ 
class Inventory 
{ 
    static void Main() 
    { 
     FileStream file = new FileStream(@"SoldItems.txt", 
      FileMode.Open, FileAccess.Read); 
     StreamReader reader = new StreamReader(file); 

     int count = 0; 
     int num; 
     string item; 

     item = reader.ReadLine(); 
     while (item != null) 
     { 
      ++count; 
      item = reader.ReadLine(); 
     } 
     int size = (int)file.Length/count; 

     Console.Write("Item Number? "); 
     num = Convert.ToInt32(Console.ReadLine()); 
     while (num != 0) 
     { 
      file.Seek(0, SeekOrigin.Begin); 
      item = reader.ReadLine(); 
      Console.WriteLine(item); 
     } 

     reader.Close(); 
     file.Close(); 
    } 
} 
} 

Выход выглядит следующим образом:

101 - Лампа, $ 100,00

102 - Ковер, $ 5,000.00

+2

'а' и где вы когда-либо изменить 'num' в этом цикле? – UnholySheep

ответ

0

Проблема в этом коде:

Console.Write("Item Number? "); 
num = Convert.ToInt32(Console.ReadLine()); 
while (num != 0) 
{ 
    file.Seek(0, SeekOrigin.Begin); 
    item = reader.ReadLine(); 
    Console.WriteLine(item); 
} 

НЮМ никогда не изменяется, что приводит к бесконечному циклу. Вы должны прочитать значение в каждом повторении цикла:

Console.Write("Item Number? "); 
num = Convert.ToInt32(Console.ReadLine()); 
while (num != 0) 
{ 
    file.Seek(0, SeekOrigin.Begin); 
    item = reader.ReadLine(); 
    Console.WriteLine(item); 

    Console.Write("Item Number? "); 
    num = Convert.ToInt32(Console.ReadLine()); 
} 
+0

Я обновил свой код, и он работает, однако элемент #, который я вводил, не соответствует правильному элементу # в текстовом файле. Например, если я ввожу номера позиций в порядке, они отображаются правильно. Но если я делаю случайные числа, они не соответствуют числу, которое я напечатал. – user2970463

0

Вы хотите сделать что-то вроде: (! Num = 0)

Console.Write("Item Number? "); 
num = Convert.ToInt32(Console.ReadLine()); 
while (num != 0) 
{ 
    // Do your seek operations here 

    // run this again so you won't be stuck in the loop 
    num = Convert.ToInt32(Console.ReadLine()); 
}  { 
     file.Seek(0, SeekOrigin.Begin); 
     item = reader.ReadLine(); 
     Console.WriteLine(item); 
    } 
Смежные вопросы