Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2012, 15:04   #1
Руслан Садаев
Пользователь
 
Регистрация: 25.09.2010
Сообщений: 28
По умолчанию Цикл for(;;)

Здравствуйте! Изучаю C# по книге Шилдта. Наткнулся на такую программу.
Код:
using System; 
using System.IO;  
 
class Inventory { 
  public static void Main() { 
    BinaryWriter dataOut; 
    BinaryReader dataIn; 
 
    string item; // name of item 
    int onhand;  // number on hand 
    double cost; // cost 
 
    try { 
      dataOut = new 
        BinaryWriter(new FileStream("inventory.dat", 
                                    FileMode.Create)); 
    } 
    catch(IOException exc) { 
      Console.WriteLine(exc.Message + "\nCannot open file."); 
      return; 
    } 
 
    // Write some inventory data to the file. 
    try { 
      dataOut.Write("Hammers");  
      dataOut.Write(10); 
      dataOut.Write(3.95); 
 
      dataOut.Write("Screwdrivers");  
      dataOut.Write(18); 
      dataOut.Write(1.50); 
 
      dataOut.Write("Pliers");  
      dataOut.Write(5); 
      dataOut.Write(4.95); 
 
      dataOut.Write("Saws");  
      dataOut.Write(8); 
      dataOut.Write(8.95); 
    } 
    catch(IOException exc) { 
      Console.WriteLine(exc.Message + "\nWrite error."); 
    } 
 
    dataOut.Close(); 
 
    Console.WriteLine(); 
 
    // Now, open inventory file for reading. 
    try { 
      dataIn = new 
          BinaryReader(new FileStream("inventory.dat", 
                       FileMode.Open)); 
    } 
    catch(FileNotFoundException exc) { 
      Console.WriteLine(exc.Message + "\nCannot open file."); 
      return; 
    } 
 
    // Lookup item entered by user. 
    Console.Write("Enter item to lookup: "); 
    string what = Console.ReadLine(); 
    Console.WriteLine(); 
 
    try { 
      for(;; ) { 
        // Read an inventory entry. 
        item = dataIn.ReadString(); 
        onhand = dataIn.ReadInt32(); 
        cost = dataIn.ReadDouble(); 
 
        /* See if the item matches the one requested. 
           If so, display information */ 
        if(item.CompareTo(what) == 0) { 
          Console.WriteLine(onhand + " " + item + " on hand. " + 
                            "Cost: {0:C} each", cost); 
          Console.WriteLine("Total value of {0}: {1:C}." , 
                            item, cost * onhand); 
          break; 
        } 
      } 
    } 
    catch(EndOfStreamException) { 
      Console.WriteLine("Item not found."); 
    } 
    catch(IOException exc) { 
      Console.WriteLine(exc.Message + "Read error."); 
    } 
 
    dataIn.Close();  
  } 
}
Смущает цикл for (;; ). Непонятно с каким шагом он работает и до какого момента.

Последний раз редактировалось Stilet; 01.11.2012 в 23:39.
Руслан Садаев вне форума Ответить с цитированием
Старый 01.11.2012, 15:09   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Все выражения оператора for являются необязательными. Например, следующий оператор используется для создания бесконечного цикла.
http://msdn.microsoft.com/ru-ru/library/ch45axte.aspx
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 01.11.2012, 15:17   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

В C++ можно, к слову, облагородить код:
Код:
#define eternity ;;
#define ever ;;
Abstraction вне форума Ответить с цитированием
Старый 01.11.2012, 15:18   #4
Руслан Садаев
Пользователь
 
Регистрация: 25.09.2010
Сообщений: 28
По умолчанию

Blagodariu

Еще 1 вопрос. Что имеется ввиду под текущей позицией, и зачем метод ReadInt32 смещает её вперёд?

Последний раз редактировалось Stilet; 01.11.2012 в 23:42.
Руслан Садаев вне форума Ответить с цитированием
Старый 01.11.2012, 15:51   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Когда программа (с помощью операционной системы) работает с файлом, возникает понятие "курсора", "позиции" - грубо говоря, точки, на которой Вы в файле находитесь. Всякий раз, когда Вы даёте команду прочитать из файла очередной символ, читается символ в текущей позиции, после чего позиция переносится на следующий символ. Соответственно, чтение любой более сложной строки реализуется последовательным чтением символов; в случае числа, позиция при этом сдвигается за конец числа.
Abstraction вне форума Ответить с цитированием
Старый 01.11.2012, 16:31   #6
Руслан Садаев
Пользователь
 
Регистрация: 25.09.2010
Сообщений: 28
По умолчанию

А для того чтобы узнать, сколько байт занимает текущее число, надо самому перевести его в бинарное и только тогда применять соответствуюший (ReadInt16 или ReadInt32) или есть какой-то другой путь?

Последний раз редактировалось Руслан Садаев; 01.11.2012 в 17:36.
Руслан Садаев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл While aharem08 Помощь студентам 9 06.10.2010 21:44
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34