Файлы. Общая концепция организации ввода-вывода данных в С++. Средства класса ios, обеспечивающие точную настройку вывода, страница 28

fseek (указатель_на_ файл,  величина_смещения,  нач_точка);

величина_смещения – тип long (<0 или >0);

нач.точка – 0 – начало файла, 1 – текущая позиция, 2 – конец файла.

Рассмотрим пример:

//создание файла  numbers.txt из N чисел

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define FNAME    "c:\\numbers.txt\0"                   //имя файла

#define N    10                                                        //количество выводимых в файл чисел

void main ()

{

char fname[20] = FNAME;

FILE *out;                                                              //объявление файловой переменной

int n;

puts ("\nFile:");

printf ("%s\n", fname);                                           //выводится путь к файлу и его имя

puts ("Input:  \n");

//открыть файл в режиме записи (w), в режиме чтения (r) //для дозаписи в конец файла режим добавления (а) if ((out = fopen (fname, "wt")) == NULL)  //открытие текстового файла и                                                                      //проверка его успешности

{

printf ("error zapis");  //если открытие файла проблемно

exit(1);

                                  }

for (int i=0; i<N; i++)                                            // цикл для организации вывода в файл

{

printf (":");                         // приглашение к вводу очередного числа

scanf ("%i", &n);               // ввод числа

fprintf (out, "%i", n);          // вывод числа в файл

                                    }

fclose (out);                                                            //закрытие файла

getch();

}

//считывание из файла txt1.txt //файл txt1.txt предварительно создан в текстовом редакторе

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>                                                        //для exit

#define FNAME    "c:\\txt1.txt\0"                                 //имя файла

#define MAXLENGTH   80                                        //количество выводимых чисел

void main ()

{

char fname[20] = FNAME;

FILE *in;                                                                       //объявление файловой переменной

int  start, stop, count;

unsigned char ch;

char st[80], st1[80];

if ((in = fopen (fname, "rt")) == NULL)                    //открытие текстового файла для чтения

{                                                 //и проверка его успешности

printf ("error zapis1");

exit(1);

}

while (!feof(in))                                                           //вывод на экран содержимого файла

{ fscanf (in, "%s  %s", st, st1); //считывание из файла в переменные st, st1

printf ("%s %s\n", st, st1);               //вывод переменных на экран                                 }                                                        //строка – только до «пробела»

if ((in = fopen (fname, "rt")) == NULL)

{                                             //повторно открываем файл для чтения

printf ("error zapis2");

exit(1);

}

while (!feof(in))                                                      //обработка файла

{                                     fscanf (in, "%c", &ch);       //считывание первого символа                             

if(ch  != '\n'){

fscanf (in, "%d %d", &start, &stop);

if (start > stop || start <1 || stop > MAXLENGTH)

printf ("neverno granica\n");

else { count = 0;

while (++count < start)

putchar(' ');

while (count++ <=stop)

putchar(ch);

putchar ('\n');

}

}

}

fclose (in);

getch();

}

Файл txt1.txt, из которого проводится чтение, выглядит так:

-30 50

|30 50

|30 50

|30 50

|30 50

|30 50

=20 60

:31 49

:30 49

:29 49

:27 49

:25 49

:30 49

:30 49

/30 49

:35 48

:35 48