Cin.getline(info.card,25);//читается не более 25 символов




cout<<"Введите info.check:";

cin>>info.check;//введя чек тем самым удаляем номер карты

switch(type){

case CARD: cout<<info.card<<endl;break;

case CHECK: cout<<info.check<<endl;break;

}

char z;

cin>>z;

}

Вот результат

Полученное значение 90 говорит о том, что результат обращения к элементу объединения не определен. Кстати, 90 это не код ошибки. Просто это случайное число. Вместо него могут быть какие-то символы.

/////////////////////////////////////////////////////////////

#include<iostream>

#include<windows>

using namespace std;

void main(){

enum paytype{CARD,CHECK};

paytype type;

//Обявление переменной типа объединение

union payment{ char card[25]; long check;} info;

// card - Имя карты

// check - Номер чека

// info – имя переменной типа payment

type=CARD;

SetConsoleOutputCP(1251);

cout<<"Введите info.check:";

cin>>info.check; /*В данном случае происходит обращение к элементу, который был последним размещен в памяти*/

cout<<"Введите ifo.card:";

cin.getline(info.card,25);

switch(type){

case CARD: cout<<info.card<<endl;break;

case CHECK: cout<<info.check<<endl;break;

}

char z;

cin>>z;

}

 

 

Множества

Множество — это группа элементов, которая ассоциируется с ее именем и с которой можно сравнивать другие величины, чтобы определить, принадлежат ли они этому множеству. Как частный случай, множество может быть пустым. Множество реализовано в C++Builder как шаблон класса, определенный в головном файле vcl/sysdefs.h.

Объявляется множество оператором:

 

Set <type, minval, maxval> переменные;

 

Параметр type определяет тип элементов множества. Обычно это порядковые типы int, char или перечислимый. Параметры minval и maxval типа unsigned char определяют минимальное и максимальное значения элементов множества. Минимальное значение должно быть не меньше 0, максимальное - не более 255. Приведем примеры объявления множеств.

Объявление переменной s1 как множества всех заглавных латинских букв имеет вид:

Set <char, 'A', 'Z'> s1;

Следующий оператор объявляет множество Ch, содержащее все символы:

 

Set <char, 0, 255> Ch;

Следующие операторы объявляют тип UPPERCASESet множества всех заглавных латинских букв и объявляют переменные s2 и s3 этого типа:

 

typedef Set <char, 'R.','Z'> UPPERCASESet;

UPPERCASESet s2, s3;

 

Следующие операторы определяют множество S, элементами которого являются данные перечислимого типа Е: red, yellow, green:

 

enum E { white, red, yellow, green };

Set <E, red, green> S;

 

Объявление переменной типа множества Set не инициализирует ее какими-то значениями. Инициализацию можно делать с помощью описанной ниже операции <<, которая означает добавление элементов в множество.

Для множесва определены следующие операции (в описании операций словами «данное множество» обозначается левый операнд):

 

Операция Определение Описание
- Set fastcall operator-(const Set& rhs) const; данное множество равно разности двух множеств: данного и rhs (операция хоr с их элементами)
-= Set& fastcall operator- =(const Set& rhs); создание нового множества, определенного разностью двух множеств: данного и rhs (операция хоr с их элементами)
* Set& fastcall operator*=(const Set& rhs); создание нового множества, определенного пересечением двух множеств: данного и хоr (операция and с их элементами)
*= Set fastcall operator*(const Set& rhs) const; данное множество равно пересечению двух множеств: данного и rhs (операция and с их элементами)

 

Рассмотрим примеры работы с множествами. Пусть вы задаете в программе некоторый вопрос, подразумевающий ответ типа «Yes/No». Тогда можные символы, вводимые пользователем в качестве ответа, являются множеством, содержащим символы «у», «Y», «n» и «N». Сформировать такое множество

можно операторами:

 

Set <char, 0, 255> TrueKey;

...

TrueКеу << 'у1' << 'r' << 'n' << 'N';

Тогда проверить, принадлежит ли введенный пользователем символ Key множеству допустимых ответов, можно с помощью метода Contains:

 

if (!TrueKey.Contains(Key))

ShowMessge("Вы ввели ошибочный ответ");

Else...

Рассмотрим еще один пример. Пусть вы хотите, чтобы в окне редактирования Edit1 пользователь мог вводить только число, т.е. только цифры от 0 до 9. Это можно сделать, включив в обработчик события OnKeyPress этого окна операторы:

 

Set <char, '0', '9'> Dig;

Dig << '0' << '1'<< '2' << '3' << '4' << '5'

<<'6' << '7' << '8' << '9';

if (!Dig.Contains(Key))

{Key = 0; BeepO; }

 

При попытке пользователя ввести символ, отличный от цифры, раздастся звук (его обеспечит функция Веер) и символ не появится в окне.

 

 

4. Структуры

Массив это упорядоченная совокупность однородных элементов. Иначе говоря, все элементы должны иметь одинаковый тип. Ну, а что делать, если нужно в массив записать элементы разного типа? Например, необходимо хранить вместе номер квартиры, ее площадь и имя хозяина. Первая величина целая, вторая действительная, а третья вообще строка. необходимо сравнить доход от хранения денег на банковских счетах в разных банках. Для этого нужно знать начальную сумму, процентную ставку и количество периодов начисления процентов. Первые две величины это числа с дробной частью, например типа double, последнее целое число, например, int. Конечно, эти величины можно записать в разные переменные, но С++ позволяет их агрегировать, т.е. рассматривать совокупность нескольких величин разного типа, как одну переменную. Такие агрегированные (объединенные) переменные называются структурами. Структура это упорядоченная совокупность элементов разного типа. Упорядоченность, в отличие от массива, заключается не в присвоении номера элементу, а в присвоении имени.

Прежде чем раасказать о том как создать структуру и как с ней работать заметим, что С++ работает не только с базовыми типами данных, но так же позволяет определить новый тип данных. Делается это с помощью оператора typedef. Например, известно, что в программе будут использованы строковые массивы для хранения фамилий. Фамилии хранятся в виде строк. Для того чтобы каждый раз не определять строковый массив, можно определить его один раз как новый тип.

typedef char name[50];

Теперь можно пользоваться новым типом name. Рассмотрим пример, в котором принято такое объявление.

 

#include <iostream>

using namespace std;

Int main(void)

{

typedef char name[50];

name n1,n2;

cin>>n1>>n2;

cout<<n1<<endl<<n2;

char z;

cin>>z;

return 0;

}

 

На самом деле, typedef не определяет новый тип, а просто дает имя шаблону (для существующих типов), по которому нужно строить или хранить данные. А вот теперь рассмотрим как, на самом деле, можно создать новый тип данных. Для этого вернемся к объявленной теме.

Описание структуры, а точнее структурного типа, выглядит следующим образом:

struct Имя_структуры структурного типа

// к имени структуры предъявляются обычные,

// для имен переменных, требования

{



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: