Nikita19041 0 / 0 / 0 Регистрация: 16.09.2013 Сообщений: 25 |
||||
1 |
||||
Структура «Покупатель». Ошибка в коде12.01.2014, 21:18. Показов 2457. Ответов 12 Метки нет (Все метки)
Помогите пжлста, не компилиться, понимаю что ошибка очень простая, но уже 2 часа сижу и туплю=
Буду очень признаетелен
__________________
0 |
nasorog -4 / 0 / 1 Регистрация: 22.12.2011 Сообщений: 215 |
||||
12.01.2014, 21:25 |
2 |
|||
0 |
xoror 31 / 31 / 4 Регистрация: 15.12.2013 Сообщений: 147 |
||||
12.01.2014, 21:30 |
3 |
|||
Это что такое Добавлено через 2 минуты
0 |
0 / 0 / 0 Регистрация: 16.09.2013 Сообщений: 25 |
|
12.01.2014, 21:30 [ТС] |
4 |
Это висуал студия 10, там немного все по другому= setlocale(LC_ALL, «Russian»);
0 |
alsav22 5493 / 4888 / 831 Регистрация: 04.06.2011 Сообщений: 13,587 |
||||
12.01.2014, 21:36 |
5 |
|||
Что за странный массив massiv?
0 |
0 / 0 / 0 Регистрация: 16.09.2013 Сообщений: 25 |
|
12.01.2014, 21:39 [ТС] |
6 |
ну надо же было его как то обозвать….
0 |
Заблокирован |
||||
12.01.2014, 21:45 |
7 |
|||
Проблема проста — некорректная обработка ввода с кирилицей.
Все остальные варианты(особенно обожаемый большинством
setlocale(LC_ALL, «Russian»); ) потребуют шаманства чтобы был полноценный ввод/вывод Миниатюры
0 |
Заблокирован |
|
12.01.2014, 21:46 |
8 |
fflush(stdin); — это изъять заменить ввод строковых констант на getline(если азумеется хотим поддержку ввода текста с пробелами), после ввод числовых значений произвести очистку буфера от n — т.е добавить сразу после cin<<value; cin.get()
1 |
Arkaniy |
12.01.2014, 21:56
|
Не по теме: В VS можно вводить переменные кириллицей. Мой мир рухнул.
0 |
75 / 75 / 10 Регистрация: 26.02.2013 Сообщений: 224 |
|
12.01.2014, 22:00 |
10 |
Nikita19041, вы объявляете переменную,
double massiv; ,
massiv[k] = покупатели[i].фамилия;
А когда тут цикл закончится: » … while(i)».
0 |
Nikita19041 0 / 0 / 0 Регистрация: 16.09.2013 Сообщений: 25 |
||||
12.01.2014, 22:04 [ТС] |
11 |
|||
вот немного переделанный вариант, все что вы говорили выше не решило проблемы=
0 |
48 / 48 / 6 Регистрация: 24.12.2009 Сообщений: 495 |
|
12.01.2014, 22:06 |
12 |
В VS можно вводить переменные кириллицей. Мой мир рухнул. Я думаю они там сделали возможность работы с юникодом А значит можно. Но обзывать переменную русскими…. Это, как в школе от учителя по геометрии услышать «дан многоугольник АБВГД….»
0 |
75 / 75 / 10 Регистрация: 26.02.2013 Сообщений: 224 |
|
12.01.2014, 22:10 |
13 |
Nikita19041, Ну и действительно, переименуйте переменные.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
12.01.2014, 22:10 |
Помогаю со студенческими работами здесь Баг в коде (статическая структура) Структура (найти ошибку в этом коде) исправить ошибку в коде с++(структура данных) Найти баг в коде, структура Train Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 13 |
Лабораторная
работа №8
Тема:
Структуры.
Ход выполнения
лабораторной работы должен быть отражен
в отчете. Отчет должен содержать титульный
лист, номера задания, коды программ,
картинку с результатом выполнения
программы и ответы на контрольные
вопросы.
ТЕОРЕТИЧЕСКАЯ
ЧАСТЬ
Языки программирования
C/C++
поддерживает определяемые пользователем
структуры – структурированный тип
данных. Он является собранием
одного или более объектов (переменных,
массивов, указателей, других структур
и т.д.), которые для удобства работы с
ними сгруппированы под одним именем.
Структуры:
-
облегчают написание
и понимание программ. -
помогают
сгруппировать данные, объединяемые
каким-либо общим понятием. -
позволяют группу
связанных между собой переменных
использовать как множество отдельных
элементов, а также как единое целое.
Как и массив,
структура представляет собой совокупность
данных,
но отличается
от него тем, что к
ее элементам (компонентам) необходимо
обращаться по имени
и ее элементы могут быть различного
типа.
Структуры целесообразно использовать
там, где необходимо объединить данные,
относящиеся к одному объекту.
Определение
структуры состоит из двух шагов:
-
объявление шаблона
структуры (задание нового типа данных,
определенного пользователем); -
определение
переменных типа объявленного шаблона.
Объявление
шаблонов структур.
Общий синтаксис объявления шаблона
структуры:
struct { тип1 имя_переменной1; тип1 имя_переменной1; //другие члены данных; }; |
struct {
char
char
long
char
double }; |
Имена шаблонов
должны быть уникальными
в пределах их области
определения
для того, чтобы компилятор мог различать
различные типы шаблонов. Задание шаблона
осуществляется с помощью ключевого
слова struct,
за которым следует имя шаблона структуры
и список элементов, заключенных в
фигурные скобки.
Имена элементов
в одном
шаблоне
также должны быть уникальными.
Однако в разных шаблонах можно использовать
одинаковые имена элементов.
Задание только
шаблона не
влечет
резервирования памяти компилятором.
Шаблон представляет компилятору
необходимую информацию об элементах
структурной переменной для резервирования
места в
оперативной памяти и организации доступа
к ней при
определении
структурной переменой и использовании
отдельных элементов структурной
переменной.
Среди членов данных
структуры могут также присутствовать,
кроме стандартных типов данных (int,
float,
char
и т.д.), ранее определенные типы, например:
/* объявление шаблона
структуры типа date */
struct
date
{ int
day, month, year; };
/* шаблон
структуры
person */
struct
person
{
char
fam[30], im[20], otch[15];
float
weight;
int
height;
struct
date birthday;
};
Структура date имеет три поля типа
int. Шаблон структуры person в качестве
элемента включает поле birthday, которое,
в свою очередь, имеет ранее объявленный
тип данных: struct date. Этот элемент
(birthday) содержит в себе все компоненты
шаблона struct date.
Определение структур-переменных.
Определение структуры-переменной ничем
не отличается от объявления обычной
переменной с предопределенным типом.
Общий синтаксис:
struct
имя_шаблона имя_переменной;
Пример:
struct
person
stud[10];
Компилятор выделит
под каждую переменную количество байтов
памяти, необходимое для хранения всех
ее элементов.
Разрешается
совмещать описание шаблона и определение
структурной переменной.
Пример:
struct
book
{
char
title[20];
char
autor[30];
double
cast;
} book1, book2, *ptr_bk=&book1;
Пример:
struct
date {int
day, month, year;} date1[5]; // объявление
массив
из
15 структур
Доступ к
компонентам структуры.
Доступ к полям осуществляется с помощью
оператора «.»
при непосредственной работе со структурой
или «->»
— при использовании указателей на
структуру. Эти операторы называются
селекторами
членов класса. Общий синтаксис для
доступа к компонентам структуры
следующий:
имя_переменной_структуры.член_данных;
имя_указателя->имя_поля;
(*имя_указателя).имя_поля;
Пример:
Прямой доступ к
элементам
-
date1[5].day=10;
-
date1[5].year=1991;
-
strcpy(book1.title,
“Война и мир”);
/* используя прямое
обращение к элементу, присваиваем
значение выбранной переменной. Текс
помещается в переменную, используя
функцию копирования – strcpy();
*/
-
stud[3].birthday.month=1;
-
stud[3].birthday.year=1980;
Доступ по указателю
-
(date1+5)->day=10;
-
(stud+3)->birthday.month=1;
// Используя доступ по
указателю на структуру, присваиваем
значение соответствующей переменной.
Указатель можно использовать и так:
-
(*(date1+5)).day=10;
-
(*(stud+3)).birthday.month=1;
Инициализация
структур. При
определении структурных переменных
можно инициализировать их поля. Эта
возможность подобна инициализации
массива и следует тем же правилами:
имя_шаблона
имя_переменной_структуры = {значение1,
значение2, …};
Компилятор
присваивает значение1
первой переменной в структуре, значение2
– второй переменной структуры и т.д., и
тут необходимо следовать некоторым
правилам:
— присваиваемые
значения должны совпадать по типу с
соответствующими полями структуры;
— можно объявлять
меньшее количество присваиваемых
значений, чем количество полей. Компилятор
присвоит нули остальными полями
структуры;
— список инициализации
последовательно присваивает значения
полям структуры, вложенных структур и
массивов.
Пример:
struct
date
{ int
day,month,year; }d[5] = { {1,3,1980}, {5,1,1990}, {1,1,1983} };
Копирование
структур-переменных.
Язык С(С++)
позволяет оператору присваивания
копировать значения одной структуры-переменной
в другую переменную, при условии, что
обе структуры-переменные относятся к
одному и тому же типу. Таким образом,
единственный оператор может скопировать
несколько членов данных, которые включают
массивы и вложенные структуры.
Однако следует
учитывать, что оператор присваивания
выполняет то, что называется поверхностной
копией в применении к структурам-переменным.
Поверхностная копия представляет собой
копирование бит за битом значений полей
переменной-источника в соответствующие
поля переменной-цели. При этом может
возникнуть проблема с такими членами
данных, как указатели,
поэтому использовать поверхностное
копирование структур надо осторожно.
Пример 1: Создать
массив структур о студентах группы. О
каждом студенте записать: имя, фамилию,
год рождения, оценки по пяти экзаменам.
Определить средний балл за сессию и
отсортировать список по сумме баллов.
#include
«stdafx.h»
#include<stdio.h>
#include<conio.h>
struct
student
{ char
name[20];
char
fam[30];
int
year;
int
mark[5];
int
average;
};
struct
student students[30];
struct
student buffer;
int
records;
int
i, j;
int
main()
{
records=0;
do
{
printf(«Student
№%dn»,
records+1);
puts(«Vvedite
familiu: «);
fflush(stdin);
gets(students[records].fam);
puts(«Vvedite
imya: «);
fflush(stdin);
gets(students[records].name);
puts(«Vvedite
vozrast: «);
scanf(«%d»,
&students[records].year);
for(i=0;
i<5; i++)
{ printf(«Vvedite
ocenku po ekzamenu №%d «,
i+1);
scanf(«%d»,
&students[records].mark[i]);
}
records++;
puts(«Prekratit’
rabotu? (1/0)»);
scanf(«%d»,
&i);
} while(i);
for
(i=0; i<records; i++)
{ students[i].average=0;
for
(j=0; j<5; j++)
students[i].average+=students[i].mark[j];
}
for
(i=0; i<records-1; i++)
for
(j=i; j<records; j++)
if
(students[i].average>students[j].average)
{ buffer=students[i];
students[i]=students[j];
students[j]=buffer;
}
for
(i=0; i<records; i++)
{
printf(«Student
%s %s «,
students[i].name, students[i].fam);
printf(»
Vosrast %d «,
students[i].year);
printf(»
Sr. ball %d n»,
students[i].average);
}
getch();
return
0;
}
Пример
2: Ввести
массив структур. Рассортировать массив
в алфавитном порядке фамилий, входящих
в структуру, перемещая сами структуры.
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct
st
{ char
name[80];
int
age;
};
void main()
{
int
i,j,k;
struct
st m[100], t;
printf(«Vvedite
kol-vo studentov: «);
scanf(«%d»,
&k);
for
(i=0; i<k; i++)
{ puts(«Vvedite
imya studenta: «);
fflush(stdin);
gets(m[i].name);
puts(«Vvedite
vozrast: «);
scanf(«%d»,
&m[i].age);
}
for
(i=0; i<k-1; i++)
for
(j=i+1; j<k; j++)
if
(strcmp(m[i].name, m[j].name)>0)
{ t=m[i];
m[i]=m[j]; m[j]=t; }
printf(«nnRezultat:
«);
for
(i=0; i<k; i++)
{
printf(«nn»);
puts(m[i].name);
printf(«%d
years «,
m[i].age);
}
getch();
}
ИНДИВИДУАЛЬНОЕ
ЗАДАНИЕ
Ввести массив
структур в соответствии с вариантом.
Рассортировать массив в алфавитном
порядке по первому полю, входящему в
структуру. В программе реализовать
меню:
-
Ввод массива
структур; -
Сортировка массива
структур; -
Изменение заданной
структуры; -
Удаление структуры
из массива; -
Вывод на экран
массива структур; -
Выход.
Варианты:
-
Структура
«Автосервис»: регистрационный номер
автомобиля, марка, пробег, мастер,
выполнивший ремонт, сумма ремонта. -
Структура
«Сотрудник»: фамилия, имя, отчество;
должность; год рождения; заработная
плата. -
Структура
«Государство»: название; столица;
численность населения; занимаемая
площадь. -
Структура «Человек»:
фамилия, имя, отчество; домашний адрес;
номер телефона; возраст. -
Структура
«Читатель»: Фамилия И.О., номер
читательского билета, название книги,
срок возврата. -
Структура
«Школьник»: фамилия, имя, отчество;
класс; номер телефона; оценки по предметам
(математика, физика, русский язык,
литература). -
Структура «Студент»:
фамилия, имя, отчество; домашний адрес;
группа; рейтинг. -
Структура
«Покупатель»: фамилия, имя, отчество;
домашний адрес; номер телефона; номер
кредитной карточки. -
Структура «Пациент»:
фамилия, имя, отчество; домашний адрес;
номер медицинской карты; номер страхового
полиса. -
Структура
«Информация»: носитель; объем; название;
автор. -
Структура «Клиент
банка»: Фамилия И.О., номер счета, сумма
на счете, дата последнего изменения. -
Структура «Склад»:
наименование товара, цена, количество,
процент торговой надбавки. -
Структура
«Авиарейсы»: номер рейса, пункт
назначения, время вылета, дата вылета,
стоимость билета. -
Структура «Вокзал»:
номер поезда, пункт назначения, дни
следования, время прибытия, время
стоянки. -
Структура
«Кинотеатр»: название кинофильма,
сеанс, стоимость билета, количество
зрителей.
5
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
-
//8. Структура «Покупатель» : фамилия, имя, отчество; домашний адрес; номер телефона; номер кредитной карточки.
-
/*
-
Ввести массив структур в соответствии с вариантом. Рассортировать массив в алфавитном порядке по первому полю, входящему в структуру. В программе реализовать меню :
-
1) Ввод массива структур;
-
2) Сортировка массива структур;
-
3) Поиск в массиве структур по заданному параметру;
-
4) Изменение заданной структуры;
-
5) Удаление структуры из массива;
-
6) Вывод на экран массива структур;
-
7) Выход.
-
*/
-
#include<stdio.h>
-
#include<locale.h>
-
#include<string.h>
-
#include<conio.h>
-
const char MAX_SIZE = 100;
-
struct Buyer
-
{
-
char name[MAX_SIZE], lastname[MAX_SIZE], thirdname[MAX_SIZE], adress[MAX_SIZE], phoneNumber[MAX_SIZE], cardNumber[MAX_SIZE];
-
}m[100], t;
-
int count=0;
-
void initStruct()
-
{
-
printf(«введите кол-во покупателей: «);
-
scanf(«%d»,&count);
-
for (int i = 0; i < count; i++)
-
{
-
puts(«Введите имя покупателя: «);
-
fflush(stdin);
-
gets(m[i].name);
-
puts(«Введите фамилию покупателя: «);
-
fflush(stdin);
-
gets(m[i].lastname);
-
puts(«Введите отчество: «);
-
fflush(stdin);
-
gets(m[i].thirdname);
-
puts(«Введите адрес покупателя: «);
-
fflush(stdin);
-
gets(m[i].adress);
-
puts(«Введите номер телефона покупателя: «);
-
fflush(stdin);
-
gets(m[i].phoneNumber);
-
puts(«Введите номер банковской карты покупателя: «);
-
fflush(stdin);
-
gets(m[i].cardNumber);
-
}
-
}
-
void sortStruct()
-
{
-
for (int i = 0; i < count — 1; i++)
-
for (int j = i + 1; j < count; j++)
-
if (strcmp(m[i].name, m[j].name)>0)
-
{
-
t = m[i]; m[i] = m[j]; m[j] = t;
-
}
-
}
-
void printOneEntry(int i)
-
{
-
printf(«nn«);
-
puts(m[i].name);
-
puts(m[i].lastname);
-
puts(m[i].thirdname);
-
puts(m[i].adress);
-
puts(m[i].phoneNumber);
-
puts(m[i].lastname);
-
}
-
void printStruct()
-
{
-
printf(«nnРезультат: «);
-
for (int i = 0; i<count; i++)
-
{
-
printOneEntry(i);
-
}
-
}
-
void search()
-
{
-
printf(«1) Имяn2) Фамилияn3) Отчествоn4) Адресn5) Номер телефонаn6) Номер банковской картыn«);
-
printf(«По какому параметру вы хотите начать поиск?n«);
-
int point;
-
scanf(«%d», &point);
-
switch (point)
-
{
-
case 1:
-
{
-
printf(«Введите значение параметра для поиска: n«);
-
char param[100];
-
scanf(«%s», param);
-
for (int i = 0; i < count; ++i)
-
{
-
if (strcmp(m[i].name, param) == 0)
-
{
-
printf(«Параметр найденn«);
-
printOneEntry(i);
-
return;
-
}
-
}
-
printf(«Ничего не найденоn«);
-
break;
-
}
-
case 2:
-
{
-
printf(«Введите значение параметра для поиска: n«);
-
char param[100];
-
scanf(«%s», param);
-
for (int i = 0; i < count; ++i)
-
{
-
if (strcmp(m[i].lastname, param) == 0)
-
{
-
printf(«Параметр найденn«);
-
printOneEntry(i);
-
return;
-
}
-
}
-
printf(«Ничего не найденоn«);
-
break;
-
}
-
case 3:
-
{
-
printf(«Введите значение параметра для поиска: n«);
-
char param[100];
-
scanf(«%s», param);
-
for (int i = 0; i < count; ++i)
-
{
-
if (strcmp(m[i].thirdname, param) == 0)
-
{
-
printf(«Параметр найденn«);
-
printOneEntry(i);
-
return;
-
}
-
}
-
printf(«Ничего не найденоn«);
-
break;
-
}
-
case 4:
-
{
-
printf(«Введите значение параметра для поиска: n«);
-
char param[100];
-
scanf(«%s», param);
-
for (int i = 0; i < count; ++i)
-
{
-
if (strcmp(m[i].adress, param) == 0)
-
{
-
printf(«Параметр найденn«);
-
printOneEntry(i);
-
return;
-
}
-
}
-
printf(«Ничего не найденоn«);
-
break;
-
}
-
case 5:
-
{
-
printf(«Введите значение параметра для поиска: n«);
-
char param[100];
-
scanf(«%s», param);
-
for (int i = 0; i < count; ++i)
-
{
-
if (strcmp(m[i].phoneNumber, param) == 0)
-
{
-
printf(«Параметр найденn«);
-
printOneEntry(i);
-
return;
-
}
-
}
-
printf(«Ничего не найденоn«);
-
break;
-
}
-
case 6:
-
{
-
printf(«Введите значение параметра для поиска: n«);
-
char param[100];
-
scanf(«%s», param);
-
for (int i = 0; i < count; ++i)
-
{
-
if (strcmp(m[i].cardNumber, param) == 0)
-
{
-
printf(«Параметр найденn«);
-
printOneEntry(i);
-
return;
-
}
-
}
-
printf(«Ничего не найденоn«);
-
break;
-
}
-
default:
-
{
-
printf(«Неизвестное значение!»);
-
return;
-
break;
-
}
-
}
-
}
-
void changeStructure()
-
{
-
int i = 0;
-
printf(«Введите номер структуры для изменения (%d — %d)n«, 0, count—1);
-
scanf(«%d», &i);
-
puts(«Введите имя покупателя: «);
-
fflush(stdin);
-
gets(m[i].name);
-
puts(«Введите фамилию покупателя: «);
-
fflush(stdin);
-
gets(m[i].lastname);
-
puts(«Введите отчество: «);
-
fflush(stdin);
-
gets(m[i].thirdname);
-
puts(«Введите адрес покупателя: «);
-
fflush(stdin);
-
gets(m[i].adress);
-
puts(«Введите номер телефона покупателя: «);
-
fflush(stdin);
-
gets(m[i].phoneNumber);
-
puts(«Введите номер банковской карты покупателя: «);
-
fflush(stdin);
-
gets(m[i].cardNumber);
-
}
-
void deleteStructure()
-
{
-
if (count > 0)
-
{
-
char bufchar[250];
-
int nomer;
-
printf(» Удаление структурыn«);
-
do
-
{
-
printf(«Введите номер структуры, которую хотите удалитьn«);
-
scanf(«%d», &nomer);
-
if (nomer > count) printf(«Такой структуры не существуетn«);
-
}
-
while (nomer > count);
-
nomer -= 1;
-
for (int a = nomer; a < count — 1; a++)
-
{
-
strcpy(m[a].lastname, m[a + 1].lastname);
-
strcpy(m[a].name, m[a + 1].name);
-
strcpy(m[a].thirdname, m[a + 1].thirdname);
-
strcpy(m[a].adress, m[a + 1].adress);
-
strcpy(m[a].phoneNumber, m[a + 1].phoneNumber);
-
strcpy(m[a].cardNumber, m[a + 1].cardNumber);
-
}
-
count—;
-
}
-
else printf(«Нет заказовnn)»);
-
}
-
int main()
-
{
-
setlocale(LC_ALL, «Russian»);
-
while (true)
-
{
-
printf(«Меню:n1) Ввод массива структур;n2) Сортировка массива структур;n3) Поиск в массиве структур по заданному параметру;n4) Изменение заданной структуры;n5) Удаление структуры из массива;n6) Вывод на экран массива структур;n7) Выход.n«);
-
int point;
-
scanf(«%d», &point);
-
switch (point)
-
{
-
case 1:
-
{
-
initStruct();
-
break;
-
}
-
case 2:
-
{
-
sortStruct();
-
break;
-
}
-
case 3:
-
{
-
search();
-
break;
-
}
-
case 4:
-
{
-
changeStructure();
-
break;
-
}
-
case 5:
-
{
-
deleteStructure();
-
break;
-
}
-
case 6:
-
{
-
printStruct();
-
break;
-
}
-
case 7:
-
{
-
return 1;
-
break;
-
}
-
default:
-
{
-
printf(«Неизвестное значение!»);
-
return 1;
-
break;
-
}
-
}
-
}
-
return 0;
-
}