Практикум для изучения дисциплины «Основы программирования»



Pdf көрінісі
бет55/81
Дата08.07.2020
өлшемі1,55 Mb.
#74978
түріПрактикум
1   ...   51   52   53   54   55   56   57   58   ...   81
Байланысты:
А.А. Тюгашев

ЗАМЕЧАНИЕ 
В программе на Си можно получить из операционной системы значение ряда 
системных параметров — так называемых переменных окружения, для чего в 
main добавляется третий предопределенный аргумент. Однако эта возможность 
на практике используется редко: int main (int argc, char *argv[], char *argp[]). 
Контрольные вопросы 
1. 
Что  такое  параметры  операционной  системы,  передаваемые  в 
программу? Каким образом они могут использоваться? 
2. 
Какой параметр идет первым (с индексом ноль) в массиве argv[]? 
3. 
Эквивалентны ли следующие записи: 
 
char
 **argv; 
 
char
 *argv[]; 
 
char
 argv[][]? 
Работа с файлами 
Помимо  средств  ввода-вывода,  работающих  со  стандартными  потоками 
ввода, вывода и ошибок (фактически, это клавиатура и экран дисплея), в 
стандартных  библиотеках  языка  программирования  Си  присутствуют 
средства  для  работы  с  информацией,  находящейся  на  дисках  и 
организованной  в  виде  файлов.  Существенно  облегчает  понимание 
принципов работы тот факт, что эти функции используют те же принципы, 
что и функции для ввода-вывода со стандартных устройств. 
При  работе  с  файлами  в  языке  Си  используется  понятие  файловый 
дескриптор.  Для  обозначения  указателя  на  файл  зарезервировано 
специальное ключевое слово FILE — одно из немногих ключевых слов в 
языке  программирования  Си,  записываемых  прописными  буквами. 
Например,  
FILE *fp; 
описывает  дескриптор  файла  с  именем  fp.  После  объявления  файлового 
дескриптора его необходимо связать с физическим файлом на диске (файла 
может  еще  не  существовать,  если  он  создается  путем  открытия  его  на 
запись  или  добавление).  Для  открытия  файла  может  использоваться 
стандартная функция fopen: 
fp=fopen("<имя файла>","<режим>"); 
Здесь 
<имя  файла> —  строка  с  именем  файла,  соответствующая  его 
наименованию  в  операционной  системе. 
<режим>  может  быть 
следующим: 


103 
 
 
"w"
 — 
запись; 
 
"r"
 — 
чтение; 
 
"a"
 — 
добавление. 
После  символа,  задающего  режим  доступа,  может  идти  дополнительный 
символ,  определяющий  доступ  в  текстовом  или  бинарном  режиме.  По 
умолчанию подразумевается текстовый режим доступа. 
Если файл открывается на чтение и его нет на диске, fopen возвращает 
NULL
 — 
специальное предопределенное значение, в противном случае — 
указатель на файл (дескриптор). 
Открытие  на  запись  уже  существующего  файла  предполагает  перезапись 
его содержимого. 
Открытие  на  добавление  существующего  файла  предполагает 
приписывание информации к его концу. 
Для  файлового  ввода-вывода  существует  ряд  функций,  соответствующих 
функциям работы со стандартным вводом-выводом, в частности: 
 
fprintf
 — 
для вывода в файл; 
 
fscanf
 — 
для чтения из файла. 
Отличие этих функций от scanf и printf заключается лишь в том, что 
первым аргументом, идущим после открывающей круглой скобки, должен 
быть дескриптор файла, например: 
fprintf(fp,"2 + 2 = %f\n", a); 
После использования файла его необходимо закрыть. Это можно сделать с 
использованием функции fclose, имеющей такой синтаксис: 
fclose(<
дескриптор файла>); 
Следующая  программа  осуществляет  ввод  строки  с  клавиатуры, 
сохранение  ее  в  текстовом  файле,  чтение  строки  из  файла  и  вывод  ее  на 
экран: 
/* Пример работы с файлом в языке программирования Си */ 
#include  
 
int main() 

  FILE *f; 
  char str[40]; 
  printf("
Введите строку:");scanf("%s",str); 
  f=fopen("file.txt","w"); 
 
  if (f==NULL) return –1; 


104 
 
  else 
  { 
fprintf(f,"%s\n",str); 
fclose(f);  
f=fopen("file.txt","r"); 
fscanf(f,"%s",str); 
fprintf("\n
строка из файла: %s",str); 
fclose(f); 
return 0; 
  } 

Файл  одновременно  можно  открыть  только  на  чтение  или  только  на 
запись.  Поэтому  два  раза  используется  вызов  функции  fopen  с  одной  и 
той  же  переменной —  дескриптором  файла,  но  с  разными  режимами 
доступа: 
Текст программы: 
#include  
#include  
 
int main() 

  FILE *fp,*fp1; 
  char Str[80]; 
  int sc=0; 
 
printf ("Программа подсчета числа вхождений подстроки \"пере\" в   
файле test.txt\n"); 
  
printf ("и замены слова \"абитуриент\" на слово \"студент\"\n"); 
 
  
// Открываем исходный файл 
  if ((fp=fopen("test.txt","r"))==NULL) 
  { 
    
printf("Ошибка открытия файла test.txt"); 
    return 1; 
  } 
 
  
// Создаем промежуточный файл для копирования 
  if ((fp1=fopen("test.bak","w"))==NULL) 
  { 
    pri
ntf("Ошибка создания промежуточного файла"); 
    return 2; 


105 
 
  } 
 
  
while (!feof(fp)) // Пока не конец исходного файла 
  { 
    
fscanf(fp,"%s",Str); // Читаем строку из исходного файла 
    
if (strstr(Str,"пере")!=NULL) sc++; // Считаем подстроки "пере" 
    if 
(!strcmp("абитуриент",Str)) 
      
strcpy(Str,"студент"); // Замена слов 
    if (!feof(fp)) fprintf(fp1,"%s ",Str); 
  } 
 
  fclose(fp); 
  fclose(fp1); 
 
  if(remove("test.txt")) // 
Удаляем исходный файл 
  { 
    
printf("Ошибка удаления файла"); 
    return 3; 
  } 
 
  
if(rename("test.bak","test.txt")) // Переименовываем промежуточный 
файл 
  { 
    
printf("Ошибка переименования промежуточного файла"); 
    return -1; 
  } 
  else 
    printf("
Было найдено %d \"пере\"\n",sc); 
 
  return 0; 

 
 


Достарыңызбен бөлісу:
1   ...   51   52   53   54   55   56   57   58   ...   81




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет