Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Инициализация полей структуры
Инициализация полей структуры может осуществляться двумя способами: · присвоение значений элементам структуры в процессе объявления переменной, относящейся к типу структуры; · присвоение начальных значений элементам структуры с использованием функций ввода-вывода (например, printf() и scanf()). В первом способе инициализация осуществляется по следующей форме: struct ИмяСтруктуры ИмяПеременной={ЗначениеЭлемента1, ЗначениеЭлемента_2,..., ЗначениеЭлементаn}; Пример struct date bd={8,"июня", 1978}; Имя элемента структуры является составным. Для обращения к элементу структуры нужно указать имя структуры и имя самого элемента. Они разделяются точкой: ИмяПеременной.ИмяЭлементаСтруктуры printf("%d %s %d",bd.day, bd.month, bd.year); Второй способ инициализации объектов языка Си с использованием функций ввода-вывода. Пример #include <stdio.h> int day; char *month; int year; }; char firstname[20]; char lastname[20]; struct date bd; }; 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> 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; просмотров: 165; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.138.226 (0.014 с.) |