ТОП 10:

Инициализация полей структуры



Инициализация полей структуры может осуществляться двумя способами:

· присвоение значений элементам структуры в процессе объявления переменной, относящейся к типу структуры;

· присвоение начальных значений элементам структуры с использованием функций ввода-вывода (например, printf() и scanf()).

В первом способе инициализация осуществляется по следующей форме:

struct ИмяСтруктуры ИмяПеременной={ЗначениеЭлемента1, ЗначениеЭлемента_2, . . . , ЗначениеЭлементаn};

Пример

struct date bd={8,"июня", 1978};

Имя элемента структуры является составным. Для обращения к элементу структуры нужно указать имя структуры и имя самого элемента. Они разделяются точкой:

ИмяПеременной.ИмяЭлементаСтруктуры

printf("%d %s %d",bd.day, bd.month, bd.year);

Второй способ инициализации объектов языка Си с использованием функций ввода-вывода.

Пример

#include <stdio.h>
#include <stdlib.h>
struct date {

int day;

char *month;

int year;

};
struct persone {

char firstname[20];

char lastname[20];

struct date bd;

};
int main() {

system("chcp 1251");

system("cls");

struct persone p;

printf("Введите имя: ");

scanf("%s",p.firstname);

printf("Введите фамилию: ");

scanf("%s",p.lastname);

printf("Введите дату рождения\nЧисло: ");

scanf("%d",&p.bd.day);

printf("Месяц: ");

scanf("%s",p.bd.month);

printf("Год: ");

scanf("%d",&p.bd.year);

printf("\nВы ввели: %s %s, дата рождения %d %s %d года",

p.firstname, p.lastname, p.bd.day, p.bd.month, p.bd.year);

getchar(); getchar();

return 0;
}

Результат работы

 


 

Работа с файлами

Для работы с файлами существует специальная структура FILE, находящаяся в библиотеке stdio.h.

Стандартный план работы с файлами:

1. Определить переменные типа FILE.

2. Открыть файл

3. Обработка файла

4. Закрыть файл.

Открытие файла осуществляется с помощью функции fopen(), которая возвращается указатель на структуру типа FILE, который можно использовать для последующих операций с файлом.

FILE *fopen(name, type);

name – имя открываемого файла (включая путь),

type - указатель на строку символов, определяющих способ доступа к файлу:

· "r" — открыть файл для чтения (файл должен существовать);

· "w" — открыть пустой файл для записи; если файл существует, то его содержимое теряется;

· "a" — открыть файл для записи в конец (для добавления); файл создается, если он не существует;

· "r+" — открыть файл для чтения и записи (файл должен существовать);

· "w+" — открыть пустой файл для чтения и записи; если файл существует, то его содержимое теряется;

· "a+" — открыть файл для чтения и дополнения, если файл не существует, то он создаётся.

Возвращаемое значение - указатель на открытый поток. Если обнаружена ошибка, то возвращается значение NULL.

Функция fclose() закрывает поток или потоки, связанные с открытыми при помощи функции fopen() файлами. Закрываемый поток определяется аргументом функции fclose().

Возвращаемое значение: значение 0, если поток успешно закрыт; константа EOF, если произошла ошибка.

Функции fscanf() и fprintf() аналогичны функциям scanf() и printf(), но работают с файлами данных, и имеют первый аргумент — указатель на файл.

fscanf(поток, "ФорматВвода", аргументы);

fprintf(поток, "ФорматВывода", аргументы);

Функции fgets() и fputs() предназначены для ввода-вывода строк, они являются аналогами функций gets() и puts() для работы с файлами.

fgets(УказательНаСтроку,КоличествоСимволов,поток);

Символы читаются из потока до тех пор, пока не будет прочитан символ новой строки '\n', который включается в строку, или пока не наступит конец потока EOF или не будет прочитано максимальное символов. Результат помещается в указатель на строку и заканчивается нуль- символом '\0'. Функция возвращает адрес строки.

fputs(УказательНаСтроку,поток);

Копирует строку в поток с текущей позиции. Завершающий нуль – символ не копируется.

Пример Ввести число и сохранить его в файле s1.txt. Считать число из файла s1.txt, увеличить его на 3 и сохранить в файле s2.txt.

#include <stdio.h>
#include <stdlib.h>
int main() {

FILE *S1, *S2;

int x, y;

system("chcp 1251");

system("cls");

printf("Введите число: ");

scanf("%d", &x);

S1 = fopen("S1.txt", "w");

fprintf(S1, "%d", x);

fclose(S1);

S1 = fopen("S1.txt", "r");

S2 = fopen("S2.txt", "w");

fscanf(S1, "%d", &y);

y += 3;

fclose(S1);

fprintf(S2, "%d\n", y);

fclose(S2);

return 0;
}

 

Пример 2. Структура Food, массив структур, считывание из файла.

#include "stdafx.h"

#include <stdio.h>

#include <iostream>

struct food {

char name[20];

int qty;

};

int main ()

{ FILE *file;

struct food shop[10];

char i=0;

file = fopen("s.txt", "r");

while (fscanf (file, "%s %d", &shop[i].name, &shop[i].qty) != EOF)

{

printf("%s %d\n", shop[i].name, shop[i].qty);

i++;

}

fclose(file);

//запись в файл

file = fopen("s.txt", "a");

printf("food:\n");

for(i =0; i<10; i++)

{ scanf("%s %d\n", &shop[i].name, &shop[i].qty);

fprintf(file, "%s %d\n", shop[i].name, shop[i].qty);

}

system("pause");

return 0;}







Последнее изменение этой страницы: 2017-02-10; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 35.172.233.2 (0.007 с.)