Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 25.02.2019
Сообщений: 3
1

Не могу разобраться с программой, и объясните как работают функции

25.02.2019, 15:54. Показов 488. Ответов 1
Метки нет (Все метки)

Программа на c, вводится динамическая структура, ввод останавливается, когда вводится "*", первая и последняя строки меняются местами. Я не понимаю, что из себя представляют функции (в особенности line, для чего используется char(10) и char(0) и что это вообще такое, еще функции *in и ap), как вообще меняются строки, и как работает последнее условие в программе.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include "stdafx.h"
#include 
#include 
#include 
#include 
 
void vod()
{
printf("\n\n--------------------------------------------------------------------------------\n");
printf("| | | Размеры | |\n");
printf("| Номер | Время |--------------------------------| Стоимость |\n");
printf("| модели | года | российский | международный | |\n");
printf("--------------------------------------------------------------------------------\n");
 
}
 
const int sh = 50;
const char* mat = "| %-18s | %-11s | %-14d | %-13c | %-8d |\n";
 
void line(char* str)
{
int num = 0;
while (str[num] != '\0')
{
if (str[num] == char(10))
{
str[num] = char(0);
}
num++;
}
}
 
typedef struct clothes {
char mo[sh];
char vg[sh];
struct {
int m;
char f;
} in;
int p;
struct clothes *next;
} clothes;
 
clothes *in(char* mo, char* vg, int m, char f, int p)
{
clothes *n = (clothes*)malloc(sizeof(clothes));
strcpy_s(n->mo, sh, mo);
strcpy_s(n->vg, sh, vg);
n->in.m = m;
n->in.f = f;
n->p = p;
n->next = NULL;
return n;
}
 
void ap(char* mo, char* vg, int m, char f, int p, clothes* head_n)
{
clothes* n = (clothes*)malloc(sizeof(clothes));
 
strcpy_s(n->mo, sh, mo);
strcpy_s(n->vg, sh, vg);
n->in.m = m;
n->in.f = f;
n->p = p;
n->next = NULL;
clothes* last_n = head_n;
while (last_n->next != NULL)
last_n = last_n->next;
last_n->next = n;
}
 
void print(clothes* head_n)
{
clothes* n = head_n;
vod();
do
{
printf(mat, n->mo, n->vg, n->in.m, n->in.f, n->p);
n = n->next;
} while (n!= NULL);
printf("\n\n");
}
 
clothes* swap(clothes* head_n)
{
clothes* n = head_n->next;
clothes* last_n = head_n;
clothes* no_last_n = head_n;
while (1)
{
if (last_n->next->next == NULL)
{
no_last_n = last_n;
last_n = last_n->next;
break;
}
last_n = last_n->next;
}
last_n->next = head_n->next;
head_n->next = NULL;
no_last_n->next = head_n;
return last_n;
}
 
int main() {
setlocale(LC_CTYPE, "Russian");
char *n_str, *n_str_2;
char mo[sh];
char vg[sh];
int m;
char f;
int p;
clothes* Head = NULL;
do 
{
printf("Введите номер: ");
fgets(mo, sh, stdin);
n_str = mo;
line(n_str);
if (n_str[0] == '*')
break;
printf("Введите модель одежды: ");
fgets(vg, sh, stdin);
n_str_2 = vg;
line(n_str_2);
if (n_str_2[0] == '*')
break;
printf("Введите российский размер: ");
scanf_s("%d", &m);
getchar();
printf("Введите международный размер: ");
scanf_s("%c", &f);
printf("Введите стоимость: ");
scanf_s("%d", &p);
printf("\n");
getchar();
if (Head == NULL)
Head = in(n_str, n_str_2, m, f, p);
else
ap(n_str, n_str_2, m, f, p, Head);
 
} while (1);
 
if (Head != NULL)
{
print(Head);
Head = swap(Head);
print(Head);
}
else
printf("Список пуст");
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2019, 15:54
Ответы с готовыми решениями:

Не могу разобраться с программой, выдает ошибку C2371, как и что исправить, не знаю, строка 20
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <locale.h> #include <math.h> char...

Объясните, как в данном примере работают виртуальные функции?
Такое дело надо обьяснить особенность виртуальной функции, типо как будет работать программа без...

Объясните пожалуйста как сделать задачку на ассемблере, покажите как все это делается, я не могу разобраться!
Пусть дан текстовый файл. Создайте новый, заменив в тексте исходного файла слова "тысячелистник" на...

Не могу разобраться с программой.
Здравствуйте! Мне понадобилась помощь с ассемблером...уже несколько часов сижу, и никак воедино...

1
39 / 31 / 7
Регистрация: 31.01.2019
Сообщений: 81
12.03.2019, 22:45 2
Цитата Сообщение от Daria1602 Посмотреть сообщение
(в особенности line, для чего используется char(10) и char(0) и что это вообще такое
line() принимает указатель на начало строки
ищет в ней символ с кодом 10 ( char(10), это перевод строки если не ошибаюсь)
и заменяет его на символ с кодом 0 ( char(0) ) - это просто нуль, еще называют терминирующим нулем.
В Си обычно конец строки нулем помечают
char(0) и '\0' эквивалентны, и в машинном коде просто равны нулю, по крайней мере мой компилятор
говорит что выражение (char(0) == '\0') истинно
не эквивалентны, соврал, правильней сказать char(0) возвращает '\0'

Добавлено через 1000000 минут
да - компилятор Си выражение char(n) вряд ли поймет, это из C++

функция *in() инициализирует структуру и возвращает указатель на нее

функция ap() выделяет память под очередную структуру,
инициализирует ее и корректирует указатель на нее в поле next предыдущей структуры.
получается такая цепочка из множества структур
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2019, 22:45

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Не могу разобраться с программой в С++
Написала программку на С++, он ее запускает и как я понимаю выполняет, но вот результатов я не...

Не могу разобраться с программой
начал делать задание и запутался Разработать программу: Ввести в программу вектор C1, состоящий из...

Не могу разобраться с программой
Я поступил в Колледж Вычислительной Техники и у нас началось программированиею Сказали поставить...

Не могу разобраться с программой на delphi
Мне нужно составить программу вычисляющую формулу F(x)=3x^4-x^3 (вместо чисел могут стоять и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.