1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 39
1

Передача структур в функцию

05.04.2021, 17:47. Показов 1275. Ответов 13

Не пойму что не так делаю, если можете, подскажите.
Привести два способа выполнения задания: с прямой передачей структуры в функцию и через указатель.
Составить массив структур для описания автомобилей с полями: марка, номер, цвет, стоимость. Вывести на экран и в отдельный файл все данные об автомобилях заданной с клавиатуры марки.

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
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <fstream>
 
#define N 3
 
using namespace std;
 
struct avto{
    char mark[15];
    char nomer[15];
    char color[15];
    char price[15];
    char giv_mark[15];
}x[N];
 
void f1(avto);
 
int main(){
    struct avto i;
    char giv_mark[15];
    for(int i = 0; i < N; i++){
        if(strcmp(x[i].mark,giv_mark) == 0)
        cout << "mark = " << x[i].mark << "nomer = " << x[i].nomer << "color = " << x[i].color << "price = " << x[i].price << endl;
        std::ofstream outfile;
        outfile.open("D:\\rez.txt");
        outfile << "mark = " << x[i].mark << endl;
        outfile << "nomer = " << x[i].nomer << endl;
        outfile << "color = " << x[i].color << endl;
        outfile << "price = " << x[i].price << endl;
        outfile.close();
    }
 
    f1(i);
 
    return 0;
}
void f1(avto){
    char giv_mark[15];
    int i;
    for(i = 0; i < N; i++){
        cout << "mark [" << i + 1 << "] = ";
        fflush(stdin);
        cin.get(x[i].mark,15);
        cout << "nomer [" << i + 1 << "] = ";
        fflush(stdin);
        cin.get(x[i].nomer,15);
        cout << "color [" << i + 1 << "] = ";
        fflush(stdin);
        cin.get(x[i].color,15);
        cout << "price [" << i + 1 << "] = ";
        fflush(stdin);
        cin.get(x[i].price,15);
    }
    cout << "giv_mark = ";
    fflush(stdin);
    cin.get(x[i].giv_mark,15);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2021, 17:47
Ответы с готовыми решениями:

Передача массива структур в функцию
У меня есть массив структур,функция SLVE,как передать массив структур в функцию? struct...

Передача массива структур в функцию
День добрый, учусь работать с структурами. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using...

Передача массива структур в функцию
Помогите пожалуйста исправить ошибку. Массив student std должен передаваться в функции.VS 2010...

Передача массива структур в функцию
Есть такой вот алгоритм поразрядной сортировки. Подскажите пожалуйста, как в параметры функции...

13
фрилансер
4160 / 3571 / 794
Регистрация: 11.10.2019
Сообщений: 9,611
05.04.2021, 19:24 2
Sergei-, например, так

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
struct avto{
    char mark[15]{};
    char nomer[15]{};
    char color[15]{};
    char price[15]{};
    char giv_mark[15]{};
};
 
void f1(const avto& a)
{
    //...
}
 
void f2(const avto* a)
{
    f1(*a);
}
 
int main()
{
    avto a;
 
    f1(a);
    f2(&a);
 
    return 0;
}
1
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 39
07.04.2021, 10:08  [ТС] 3
Компилятор все компилирует, но не работает код, я не могу понять в чем причина

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
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <fstream>
 
#define N 3
 
using namespace std;
 
struct avto{
  char mark[15]{};
  char nomer[15]{};
  char color[15]{};
  char price[15]{};
  char giv_mark[15]{};
}x[N];
 
void f1(const avto& a)
{
 
  int i;
  for(i = 0; i < N; i++){
  cout << "mark [" << i + 1 << "] = " << endl;
  fflush(stdin);
  cin.get(x[i].mark,15);
  cout << "nomer [" << i + 1 << "] = " <<  endl;
  fflush(stdin);
  cin.get(x[i].nomer,15);
  cout << "color [" << i + 1 << "]  = ";
  fflush(stdin);
  cin.get(x[i].color,15);
  cout << "price [" << i + 1 << "] = ";
  fflush(stdin);
  cin.get(x[i].price,15);
  }
  cout << "giv_mark = ";
  fflush(stdin);
  cin.get(x[i].giv_mark,15);
}
 
void f2(const avto* a)
 {
   f1 (*a);
   char giv_mark[15];
   for(int i = 0; i < N; i++){
     if(strcmp(x[i].mark,giv_mark) == 0)
     cout << "mark = " << x[i].mark << "nomer = " << x[i].nomer << "color = " << x[i].color << "price = " << x[i].price << endl;
     ofstream outfile;
     outfile.open("D:\\rez.txt");
     outfile << "mark = " << x[i].mark << "nomer = " << x[i].nomer << "color = " << x[i].color << "price = " << x[i].price << endl;
     outfile.close();
   }
}
 
int main(){
  avto a;
 
  f1(a);
  f2(&a);
 
  return 0;
}
0
фрилансер
4160 / 3571 / 794
Регистрация: 11.10.2019
Сообщений: 9,611
07.04.2021, 10:11 4
Sergei-, в чём именно выражается его неработа?
0
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 39
07.04.2021, 10:17  [ТС] 5
Вводится только первый char mark, и все
Миниатюры
Передача структур  в функцию  
0
фрилансер
4160 / 3571 / 794
Регистрация: 11.10.2019
Сообщений: 9,611
07.04.2021, 10:25 6
Sergei-,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdio> 
 
...
...
 
void f1(const avto& a)
{
    for(int i = 0; i < N; i++)
    {
        cout<<"mark "    <<i<<" = "; cin.get(x[i].mark    ,std::size(avto{}.mark    )); std::getchar();
        cout<<"nomer "   <<i<<" = "; cin.get(x[i].nomer   ,std::size(avto{}.nomer   )); std::getchar();
        cout<<"color "   <<i<<" = "; cin.get(x[i].color   ,std::size(avto{}.color   )); std::getchar();
        cout<<"price "   <<i<<" = "; cin.get(x[i].price   ,std::size(avto{}.price   )); std::getchar();
        cout<<"giv_mark "<<i<<" = "; cin.get(x[i].giv_mark,std::size(avto{}.giv_mark)); std::getchar();
    }
}
1
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 39
15.04.2021, 11:26  [ТС] 7
Как сделать сравнения if в строках? что бы одну строку сравнить с другой, и если оно одинаковые то if сработал?

C++
1
2
3
4
5
6
7
8
for (i = 0; i < N; i++) {
        if (strcmp(x[i].giv_mark,x[i].mark) == 0){
            cout << "mark = " << (x[i].mark, std::size_t(avto{}.mark)) << " nomer = " << x[i].nomer << " color = " << x[i].color << " price = " << x[i].price;
            ofstream outfile;
            outfile.open("D:\\rez.txt");
            outfile << "mark = " << x[i].mark << " nomer = " << x[i].nomer << " color = " << x[i].color << " price = " << x[i].price << endl;
            outfile.close();
        }
При этом коде ничего не выводиться.

if (strcmp(x[i].giv_mark,x[i].mark) != 0) -- тогда выводится все введенные данные.
if (strcmp(x[i].giv_mark,x[i].mark) == 1) --- здесь тоже ничего не выводиться.
0
фрилансер
4160 / 3571 / 794
Регистрация: 11.10.2019
Сообщений: 9,611
15.04.2021, 11:56 8
Sergei-,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string> 
 
int main()
{
    char str1[10]={'1','2','3',0,'8'};
    char str2[15]={'1','2','3',0,'7'};
 
    if(std::string_view(str1)==std::string_view(str2))
    {
        std::cout<<"равны"<<'\n';
    }
    else
    {
        std::cout<<"не равны"<<'\n';
    }
}
Добавлено через 17 минут
поправочка: в конце массивов обязательно должен быть '\0' (сейчас он там имеется, так как хвост массивов инициализирован нулями)

Добавлено через 51 секунду
а вообще, нужно поля класса сделать std::string и забыть рутину ))
1
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 39
18.04.2021, 17:09  [ТС] 9
Вот часть кода, все ок, но на экран не выводит марку,
в файл записывает все верно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void f1(avto& a)
{
  int i;
    for (i = 0; i < N; i++) {
        cout << "mark" << i << " = "; cin.get(x[i].mark, std::size_t(avto{}.mark)); std::getchar();
        cout << "nomer" << i << " = "; cin.get(x[i].nomer, std::size_t(avto{}.nomer)); std::getchar();
        cout << "color" << i << " = "; cin.get(x[i].color, std::size_t(avto{}.color)); std::getchar();
        cout << "price" << i << " = "; cin.get(x[i].price, std::size_t(avto{}.price)); std::getchar();
    }
    cout << "giv_mark" << i << " = "; cin.get(x[i].giv_mark, std::size_t(avto{}.giv_mark)); std::getchar();
    for (int i = 0; i < N; i++) {
        if (std::size_t(avto{}.mark),std::size_t(avto{}.giv_mark) == 0)
          cout << "mark = " << x[i].mark, std::size_t(avto{}.mark); cout << " nomer = " << x[i].nomer, std::size_t(avto{}.nomer); cout << " color = " << x[i].color, std::size_t(avto{}.color); cout << " price = " << x[i].price, std::size_t(avto{}.price);
          ofstream outfile;
          outfile.open("D:\\rez.txt");
          outfile << "mark = " << x[i].mark << " nomer = " << x[i].nomer << " color = " << x[i].color << " price = " << x[i].price << endl;
          outfile.close();
          return;
    }
}
Миниатюры
Передача структур  в функцию   Передача структур  в функцию  
0
фрилансер
4160 / 3571 / 794
Регистрация: 11.10.2019
Сообщений: 9,611
18.04.2021, 17:33 10
Цитата Сообщение от Sergei- Посмотреть сообщение
но на экран не выводит марку
судя по скрину - всё выведено же

Цитата Сообщение от Sergei- Посмотреть сообщение
cout << "mark = " << x[i].mark, std::size_t(avto{}.mark);
выделенное красным - зачем тут?
0
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 39
18.04.2021, 18:01  [ТС] 11
Если я буру больше одного значения, то берется только 1 введенное в mark, второе почему то пропускает
Я думаю проблема в
C++
1
if (std::size_t(avto{}.mark) == std::size_t(avto{}.giv_mark))
но не пойму, как мне его исправить, для того что бы он нормально сравнил.

C++
1
cout << "mark = " << x[i].mark, std::size_t(avto{}.mark);
- для вывода введенного значения.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void f1(avto& a)
{
  int i;
    for (i = 0; i < N; i++) {
        cout << "mark" << i << " = "; cin.get(x[i].mark, std::size_t(avto{}.mark)); std::getchar();
        cout << "nomer" << i << " = "; cin.get(x[i].nomer, std::size_t(avto{}.nomer)); std::getchar();
        cout << "color" << i << " = "; cin.get(x[i].color, std::size_t(avto{}.color)); std::getchar();
        cout << "price" << i << " = "; cin.get(x[i].price, std::size_t(avto{}.price)); std::getchar();
    }
    cout << "giv_mark" << i << " = "; cin.get(x[i].giv_mark, std::size_t(avto{}.giv_mark)); std::getchar();
    for (int i = 0; i < N; i++) {
        if (std::size_t(avto{}.mark) == std::size_t(avto{}.giv_mark))
          cout << "mark = " << x[i].mark; cout << " nomer = " << x[i].nomer, std::size_t(avto{}.nomer); cout << " color = " << x[i].color, std::size_t(avto{}.color); cout << " price = " << x[i].price, std::size_t(avto{}.price);
          ofstream outfile;
          outfile.open("D:\\rez.txt");
          outfile << "mark = " << x[i].mark << " nomer = " << x[i].nomer << " color = " << x[i].color << " price = " << x[i].price << endl;
          outfile.close();
          return;
    }
}
Миниатюры
Передача структур  в функцию   Передача структур  в функцию  
0
фрилансер
4160 / 3571 / 794
Регистрация: 11.10.2019
Сообщений: 9,611
18.04.2021, 18:12 12
Sergei-, замени уже эти массивчики на std::string ))

Цитата Сообщение от Sergei- Посмотреть сообщение
if (std::size_t(avto{}.mark) == std::size_t(avto{}.giv_mark))
это вообще зачем?

Цитата Сообщение от Алексей1153 Посмотреть сообщение
выделенное красным - зачем тут?
ну, в одном месте убрал, а дальше - не стал? А что так ?

Цитата Сообщение от Sergei- Посмотреть сообщение
ofstream outfile;
файл пересоздаётся каждую итерацию цикла. В фале окажется только самая последняя запись
0
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 39
12.05.2021, 00:57  [ТС] 13
Почему видает ошибку ( Ошибка сегментирования (стек памяти сброшен на диск) -- вот такая ошибка)

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
#include <iostream>
#include <string>
#include <fstream>
 
#define N 3
 
using namespace std;
 
struct avto{
  std::string mark[15]{};
  std::string nomer[15]{};
  std::string color[15]{};
  std::string price[15]{};
}x[N];
 
std::string giv_mark[15]{};
 
int i;
 
void f1(const avto& a)
{
  for(i = 0; i < N; i++){
  cout << "mark [" << i + 1 << "] = ";
  std::cin >> x[i].mark[15];
  cout << "nomer [" << i + 1 << "] = ";
  std::cin >> x[i].nomer[15];
  cout << "color [" << i + 1 << "]  = ";
  std::cin >> x[i].color[15];
  cout << "price [" << i + 1 << "] = ";
  std::cin >> x[i].price[15];
  }
  cout << "giv_mark = ";
  std::cin >> giv_mark[15];
}
void f2(const avto* a)
 {
   f1 (*a);
   for(i = 0; i < N; i++){
     if(std::string(giv_mark[15]) == std::string(x[i].mark[15]))
     std::cout << "mark = " << x[i].mark[15] << "nomer = " << x[i].nomer[15] << "color = " << x[i].color[15] << "price = " << x[i].price[15];
     ofstream outfile;
     outfile.open("D:\\rez.txt");
     outfile << "mark = " << x[i].mark << "nomer = " << x[i].nomer << "color = " << x[i].color << "price = " << x[i].price << endl;
     outfile.close();
   }
}
 
int main(){
  avto a;
 
  f1(a);
  f2(&a);
 
  return 0;
}
Миниатюры
Передача структур  в функцию  
0
фрилансер
4160 / 3571 / 794
Регистрация: 11.10.2019
Сообщений: 9,611
12.05.2021, 07:32 14
Цитата Сообщение от Sergei- Посмотреть сообщение
std::cin >> x[i].mark[15];
выход за границы массива

Добавлено через 1 минуту
а зачем эти массивы вообще тут?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2021, 07:32
Помогаю со студенческими работами здесь

Передача массива структур в функцию
В общем проблема с передачей массива структур в функцию... Структура описана следующим образом:...

Передача вектора структур в функцию
Как передать значение вектора структур в функцию visual? #include &quot;stdafx.h&quot; #include &lt;conio.h&gt;...

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

Передача динамического массива структур в функцию
Помогите, пожалуйста переделать. Нужно передать динамический массив. Есть такой код:...

Передача указателя на массив структур в функцию
Здрвствуйте! Не могу сообразить почему вылетает segmentation fault в функции, inputDate при...

Передача динамического массива структур в функцию
Доброго времени суток:) Имеется входной файл,который представлен в виде пар через запятую...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru