Турбо С: руководство пользователя. Часть 1

Турбо С: руководство пользователя. Часть 1 - Стр. 62

Печать PDF
Индекс материала
Турбо С: руководство пользователя. Часть 1
Стр. 2
Стр. 3
Стр. 4
Стр. 5
Стр. 6
Стр. 7
Стр. 8
Стр. 9
Стр. 10
Стр. 11
Стр. 12
Стр. 13
Стр. 14
Стр. 15
Стр. 16
Стр. 17
Стр. 18
Стр. 19
Стр. 20
Стр. 21
Стр. 22
Стр. 23
Стр. 24
Стр. 25
Стр. 26
Стр. 27
Стр. 28
Стр. 29
Стр. 30
Стр. 31
Стр. 32
Стр. 33
Стр. 34
Стр. 35
Стр. 36
Стр. 37
Стр. 38
Стр. 39
Стр. 40
Стр. 41
Стр. 42
Стр. 43
Стр. 44
Стр. 45
Стр. 46
Стр. 47
Стр. 48
Стр. 49
Стр. 50
Стр. 51
Стр. 52
Стр. 53
Стр. 54
Стр. 55
Стр. 56
Стр. 57
Стр. 58
Стр. 59
Стр. 60
Стр. 61
Стр. 62
Стр. 63
Стр. 64
Стр. 65
Стр. 66
Стр. 67
Стр. 68
Стр. 69
Все страницы
                     mystar.subclass =  2;                                      
                     mystar.decl     =  3.5167;                                 
                     mystar.RA       = -9.633;                                  
                     mystar.dist     =  0.303;                                  
                                                                                
                     /* конец функции main() */                                 
                  }                                                             
                                                                                
          Вы обращаетесь  к каждому элементу структуры,  используя его          
     составное имя,  состоящее из имени структуры (на первом месте) и,          
     в порядке иерархической подчиненности, имен ее образующих элемен-          
     тов, разделенных  точками (.).  Конструкция вида: varname.memname          
     (имя переменной.имя элемента) считается эквивалентной имени пере-          
     менной того же типа,  что и memname,  и вы можете выполнять с ней          
                                                                                
                                                                                
     те же операции.                                                            
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                

                         - 511,512 -
                                                                                
               Структуры и указатели                                            
     -----------------------------------------------------------------          
                                                                                
          Вы можете описывать указатели на структуры точно так же, как          
     и  указатели на другие типы  данных.  Это необходимо для создания          
     связных списков и других динамических структур  данных элементами          
     которых, в свою очередь, являются структуры данных.                        
                                                                                
          Фактически указатели на структуры так часто  используются  в          
     Си, что    существует  специальный  символ  для ссылки на элемент          
     структуры, аресованной  указателем.  Рассмотрим следующий вариант          
     предыдущей программы:                                                      
                                                                                
                  #include                                             
                                                                                
                  do_main_menu(short *done)                                     
                  {                                                             
                                                                                
                      char cmd;                                                 
                                                                                
                      *done = 0;                                                
                      do {                                                      
                          cmd = toupper(getch());                               
                          switch(cmd) {                                         
                              case 'F' : do_file_menu(done); break;             

                         - 515,516 -
                                                                                
                              case 'R' : run_program(); break;                  
                              case 'C' : do_compile(); break;                   
                              case 'M' : do_make(); break;                      
                              case '?' : do_project_menu(); break;              
                              case 'O' : do_option_menu(); break;               
                              case 'E' : do_error_menu(); break;                
                              default  : handle_others(cmd,done);               
                      } while (!*done);                                         
                  }                                                             
                                                                                
          Эта функция организует  цикл,  в котором символ считывается,          
     преобразуется к значению на верхнем регистре, а затем запоминает-          
     ся  в  переменной  cmd.  Потом   введенный  символ обрабатывается          
     оператором switch на основе значения cmd.                                  
                                                                                
          Цикл повторяется до тех пор,  пока переменная done не станет          
     равной нулю   (предположительно  в   функции   do_file_menu   или          
     handle_others).                                                            
                                                                                
          Оператор switch  получает  значение  cmd  и сравнивает его с          
     каждым значением метки case.  Если они совпадают,  начинается вы-          
     полнение операторов   данной метки,  которое продолжается либо до          
                                                                                
     ближайшего оператора break,  либо до конца оператора switch. Если          
     ни одна из меток не совпадает, и вы включили метку default в опе-          
     ратор switch,  то будут выполняться операторы  этой  метки;  если          
     метки default нет, оператор switch целиком игнорируется.                   
                                                                                
          Значение value,   используемое  в switch(value)  должно быть          
     приведено к целому значению. Другими словами, это значение должно          
     легко преобразовываться  в целое для таких типов данных как char,          
     разновидности enum и,  конечно,  int, а также всех его вариантов.          
     Нельзя использовать   в операторе switch вещественные типы данных          
     (такие как float и double),  указатели, строки и другие структуры          
     данных, но разрешается использовать элементы структур данных сов-          
     местимых с целыми значениями.                                              
                                                                                
          Хотя (value)  может быть выражением (константа,  переменная,          
     вызов функции,  и другие комбинации их), метки case должны содер-          
     жать константы.  Кроме того,  в качестве ключевого значения  case          
     может быть только одно значение.  Если бы do_main_menu не исполь-          
     зовало фукцию toupper для преобразования cmd, оператор switch мог          
     бы выглядеть следующим образом:                                            
                                                                                
                  switch (cmd) {                                                

                         - 517,518 -
                                                                                
                      case 'f' :                                                
                      case 'F' : do_file_menu(done);                            
                           break;                                               
                      case 'r' :                                                
                      case 'R' : run_program();                                 
                           break;                                               
                      ...                                                       
                                                                                
          Этот оператор выполняет функцию do_file_menu  независимо  от          
     того, в  каком регистре поступает значение cmd, аналогично выпол-          
     няются действия для других альтернатив значения cmd.                       
                                                                                
          Запомните, что для завершения данного case вы должны исполь-          
     зовать оператор break . В противном случае будут выполняться пос-          
     ледовательно все операторы,  относящиеся к другим меткам (до  тех          
     пор пока не встретится оператор break).