
- •Структуры. Файлы
- •Пример организации интерфейса в виде меню
- •Пример получения битового представления вещественного числа
- •Пример заполнения полей массива структур
- •Более сложный пример использования массива структур
- •Пример использования многофайловой компиляции
- •1. Описать структуру с именем student, содержащую следующие поля:
- •2. Написать программу, выполняющую следующие действия:
- •Вывод символов в текстовый файл
- •Ввод символов из текстового файла
- •Вывод строк в текстовый файл
- •Ввод из текстового файла строк
- •Чтение и вывод на экран буфера текстового файла
- •Пример использования функций, текстовых файлов и многофайловой компиляции
- •1. Описать структуру с именем student, содержащую следующие поля:
- •2. Написать программу, выполняющую следующие действия:
- •Ввод-вывод в двоичный файл
- •Пример использования функций, бинарных файлов и многофайловой компиляции
- •1. Описать структуру с именем student, содержащую следующие поля:
- •2. Написать программу, выполняющую следующие действия:
- •Аргументы командной строки
- •Задание параметров программы в командной строке
- •Возможные ошибки при записи в файл или чтении из него
- •Определение размера файла
- •Удаление файла
- •Переименование файла
Пример использования многофайловой компиляции
1. Описать структуру с именем student, содержащую следующие поля:
NAME – фамилия и инициалы;
номер группы;
успеваемость (массив из пяти элементов).
2. Написать программу, выполняющую следующие действия:
ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT;
упорядочение записей по алфавиту;
вывод на дисплей фамилий и номеров групп для всех студентов, имеющих хотя бы одну оценку 3;
если таких студентов нет, вывести соответствующее сообщение.
////////////////////////////////////////////////////////////////
//head.h константы, определение структурного типа, прототипы
const int KOL_ST = 10;
const int KOL_OC = 5;
const int BAL = 3;
struct student {
unsigned short gruppa;
char fio[20];
unsigned short ysp[KOL_OC];
};
//заполнение массива записей с информацией о студентах и их оценках
int vvod (student students[],const int kol_st, const int kol_oc);
//вывод из массива записей на экран информации о студентах c оценкой
// bal и количеством оценок kol_oc int vivod (student students [], const int kol_st, const int kol_oc, const int bal);
//проверка наличия оценки bal среди массива оценок ysp размера kol_oc
int otsenka (unsigned short ysp[],const int kol_oc,const int bal);
//вспомогательная функция для стандартной функции сортировки qsort()
int compare( const void *arg1, const void *arg2 );
////////////////////////////////////////////////////////////////
// stdafx.h
#pragma once
#define WIN32_LEAN_AND_MEAN//Exclude rarely-used stuff from Windows headers
#include <stdio.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here
#include <iostream>
#include <iomanip>
#include <conio.h>
#include "head.h" //!!!подключаем заголовочный файл
using namespace std;
////////////////////////////////////////////////////////////////
//func.cpp
#include "stdafx.h"
//функция получает массив записей о студентах, их количество и //количество предметов
int vvod (student *students,const int kol_st,const int kol_oc) {
for (int i=0;i<kol_st;i++) {
cout <<"vvedite fio studenta #"<<i+1<<" ";
cin >>students[i].fio;
cout <<"vvedite gryppy studenta #"<<i+1<<" ";
cin >>students[i].gruppa;
cout <<"\tvsego otsenok: "<< kol_oc <<endl;
cout <<"vvedite otsenki studenta #"<<i+1<<endl;
for (int j=0;j<kol_oc;j++){
cin >>students[i].ysp[j];
}
}
return 0;
}
int vivod(student *students,const int kol_st,const int kol_oc, const int bal) {
int i,j;
bool prov;
for (i=0;i< kol_st;i++){
if (otsenka(students[i].ysp,kol_oc,bal)) {
prov=true;
cout<<"student " << setw(15) << students[i].fio
<< " iz "<<students[i].gruppa
<<"-y gruppi imeet hotya bi odny troiky"<<endl;
}
}
if (!prov) cout<<" net studentov, imeyuschih troiki"<<endl;
return 0;
}
int otsenka (unsigned short ysp[],const int kol_oc, const int bal) {
for (int i=0;i<kol_oc;i++){
if (ysp[i]==bal) return 1;
}
return 0;
}
//сравниваем поля с фамилиями
int compare( const void *arg1, const void *arg2 )
{ return _stricmp( (char*)(((student*)arg1)->fio), (char*)(((student*)arg2)->fio));
}
////////////////////////////////////////////////////////////////
//main.cpp
#include "stdafx.h"
int main () {
student students[KOL_ST]; //определение масссива записей о студентах
vvod (students,KOL_ST,KOL_OC);
qsort(students, KOL_ST, sizeof(student),compare);
vivod (students,KOL_ST,KOL_OC,BAL);
_getch();
return 0;
} //
////////////////////////////////////////////////////////////////
Форматированный вывод в файл, используя <<
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
char ch = 'x';
int j = 77;
double d = 6.02;
string str1 = "Kafka"; //строки-объекты с выделенной памятью
string str2 = "Proust";
ofstream outfile("fdata.txt"); //создание потока outfile
outfile << ch //запись данных в поток
<< j
<< ' ' //пробел между числами
<< d
<< str1
<< ' ' // пробел между строками
<< str2;
cout << "File written\n";
_getch();
return 0; //при завершении программы файл будет закрыт
}
////////////////////////////////////////////////////////////////
Форматированное чтение из файла, используя >>
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
char ch;
int j;
double d;
string str1;
string str2;
ifstream infile("fdata.txt"); //создание потока класса ifstream
//чтение данных из потока
infile >> ch >> j >> d >> str1 >> str2;
cout << ch << endl //вывод данных на экран
<< j << endl
<< d << endl
<< str1 << endl
<< str2 << endl;
_getch();
return 0;
} //при завершении программы файл будет закрыт
////////////////////////////////////////////////////////////////