Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65

Передача массива в поле структуры

14.10.2014, 14:34. Показов 3935. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо передать массив из 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
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
/*Описать структуру с именем NOTE, содержащую следующие поля: 
 * фамилия, имя; 
 * номер телефона; 
 * дата рождения (массив из трех чисел). 
 * Написать программу, выполняющую следующие действия: ввод с клавиатуры данных в массив, состоящий из 
 * восьми элементов типа NOTE(записи должны быть упорядочены по дате рождения); 
 * вывод на экран информации о человеке, номер телефона которого введен с клавиатуры (если такого нет, 
 * вывести соответствующее сообщение).
 */ 
 
namespace Lab3_1
{
 
    struct Note
    {
        string _surname;
        string _name;
        int _phone;
        int[] _birthday;
 
        public Note(string surname, string name, int phone, int[] birthday)
        {
            if (birthday.Length != 3)
                throw new Exception("Массив должен состоять из трёх чисел.");
            _surname = surname;
            _name = name;
            _phone = phone;
            _birthday = new int[3];
            _birthday = birthday;
        }
 
        public string Surname
        {
            get
            {
                return _surname;
            }
            set
            {
                _surname = value;
            }
        }
 
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                _name = value;
            }
        }
 
        public int Phone
        {
            get
            {
                return _phone;
            }
            set
            {
                _phone = value;
            }
        }
 
        public int[] Birthday
        {
            get
            {
                return _birthday;
            }
            set
            {
                if (value.Length != 3)
                    throw new Exception("Массив должен состоять из трёх чисел.");
                _birthday = value;
            }
        }
 
        public override string ToString()
        {
            return "Фамилия: " + this.Surname + " Имя: " + this.Name + "\nНомер телефона: " + this.Phone;
        }
    };
 
    class Program
    {
        static void Main(string[] args)
        {
            Note[] note = new Note[2];
            int[] BDay = new int[3];
            string[] template = {"Введите число: ", "Введите месяц: ", "Введиет год: "};
            //DateTime date = new DateTime();
            //DateTime dateTMP = new DateTime();
 
            Console.WriteLine("Заполнять в ручную?(Y/N)");
            string res = Console.ReadLine();
 
            if (res == "N" || res == "n")
            {
                string[] surname = {"dsd", "zgf"};
                string[] name = {"wfwe", "eww"};
                int[] phone = {2342, 12312};
                int[,] bday = {
                                {20, 5, 1994}, 
                                {15, 2, 1990} 
                              };
                for (int i = 0; i < note.Length; i++)
                {
                    note[i].Surname = surname[i];
                    note[i].Name = name[i];;
                    note[i].Phone = phone[i];
                    for (int j = 0; j < 3; j++)
                    {
                        BDay[j] = bday[i, j];
                    }
                    Array.Copy(note[i].Birthday, BDay, 0);
                    //BDay.CopyTo(note[i].Birthday, 0);
                    //note[i].Birthday.CopyTo(BDay, 0);
                }
            }
            else
            {
                Console.WriteLine("Введите новую запись.");
                for (int i = 0; i < note.Length; i++)
                {
                    Console.Write("Введите фамилию: ");
                    note[i].Surname = Console.ReadLine();
                    Console.Write("\tВведите имя: ");
                    note[i].Name = Console.ReadLine();
                    Console.Write("\nВведите номер телефона: ");
                    note[i].Phone = int.Parse(Console.ReadLine());
                    Console.WriteLine("Введите дату рожденияч");
                    for (int j = 0; j < 3; j++)
                    {
                        Console.Write(template[j]);
                        BDay[j] = int.Parse(Console.ReadLine());
                    }
                    note[i].Birthday = BDay;
                }
            }
 
            //date = new DateTime(note[0].Birthday[2], note[0].Birthday[1], note[0].Birthday[0]);
            //for (int i = 0; i < note.Length; i++)
            //{
            //    for (int j = i + 1; j < note.Length; j++)
            //    {
            //        dateTMP = new DateTime(note[j].Birthday[2], note[j].Birthday[1], note[j].Birthday[0]);
            //        if (date > dateTMP)
            //        {
            //            var tmp = note[i];
            //            note[i] = note[j];
            //            note[j] = tmp;
            //        }
            //        else
            //        {
            //            var tmp = note[j];
            //            note[j] = note[i];
            //            note[i] = tmp;
            //        }
            //    }
            //}
 
            for (int i = 0; i < note.Length; i++)
            {
                Console.WriteLine(note[i].Surname);
                Console.WriteLine(note[i].Name);
                Console.WriteLine(note[i].Phone);
                for (int j = 0; j < 3; j++)
                {
                    Console.Write(note[i].Birthday[j]);
                    if (j != 2)
                    {
                        Console.Write(".");
                    }
                }
                Console.WriteLine();
            }
 
            Console.WriteLine("\nВведите номер телефона для поиска:");
            for (int i = 0; i < note.Length; i++)
            {
                if (int.Parse(Console.ReadLine()) == note[i].Phone)
                {
                    Console.WriteLine(note[i].Surname);
                    Console.WriteLine(note[i].Name);
                    for (int j = 0; j < 3; j++)
                    {
                        Console.Write(note[i].Birthday[j]);
                        if (j != 2)
                        {
                            Console.Write(".");
                        }
                    }
                    Console.WriteLine();
                }
            }
            Console.ReadKey();
        }
    }
}
проблема в этой части
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 for (int i = 0; i < note.Length; i++)
                {
                    note[i].Surname = surname[i];
                    note[i].Name = name[i];;
                    note[i].Phone = phone[i];
                    for (int j = 0; j < 3; j++)
                    {
                        BDay[j] = bday[i, j];
                    }
                    Array.Copy(note[i].Birthday, BDay, 0);
                    //BDay.CopyTo(note[i].Birthday, 0);
                    //note[i].Birthday.CopyTo(BDay, 0);
                }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.10.2014, 14:34
Ответы с готовыми решениями:

Передача структуры из программы на c# в dll на c++ и получение структуры из dll
В общем проблема в том, что при попытке передачи структуры созданной в c# в dll на c++ происходит событие pinvokestackimbalance Гуглил...

Не меняется поле структуры
Здравствуйте! Подскажите, пожалуйста, почему не меняется поле во внутренней структуре: namespace ConsoleApplication1 { ...

Передача структуры из C# в DLL на C++
Здравствуйте! Вот такой вопросик, можете подсказать варианты передачи структуры в DLL написанную на C++? Есть обертка для DLL на...

24
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
14.10.2014, 22:45  [ТС]
Студворк — интернет-сервис помощи студентам
Metall_Version, так я в коде и пробовал через Array.Copy
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
14.10.2014, 22:58
Цитата Сообщение от meksik Посмотреть сообщение
хорошо) но чем ваш способ отличается от моего? там такая же логика скорее всего, просто в одну строку
ничем , массив копируется по значению

Добавлено через 11 минут
Цитата Сообщение от Ghost_Inq Посмотреть сообщение
так я в коде и пробовал через Array.Copy
вы копируете из массива note[i].Birthday в массив BDay , а первый массив у вас пустой ,
если нужно скопировать массив BDay в note[i].Birthday то поменяйте их местами

Добавлено через 28 секунд
C#
1
Array.Copy(BDay, note[i].Birthday, 0);
0
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
14.10.2014, 23:15  [ТС]
Metall_Version, на самом деле я их менял местами, одно и тоже. Говорит что значение метода Null
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
14.10.2014, 23:20
Лучший ответ Сообщение было отмечено Ghost_Inq как решение

Решение

а ну точно , его нужно проинициализировать, как я говорил выше.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int i = 0; i < note.Length; i++)
                {
                    note[i].Surname = surname[i];
                    note[i].Name = name[i];;
                    note[i].Phone = phone[i];
                    for (int j = 0; j < 3; j++)
                    {
                        BDay[j] = bday[i, j];
                    }
                    note[i].Birthday = new int[BDay.Length];
                    Array.Copy(BDay, note[i].Birthday, 0);
                    //BDay.CopyTo(note[i].Birthday, 0);
                    //note[i].Birthday.CopyTo(BDay, 0);
                }
Добавлено через 36 секунд
я же этот пример не просто так писал
C#
1
2
3
int[] a = new int[] { 1, 2, 3 };
            int[] b = new int[a.Length];
            Array.Copy(a, b, a.Length);
1
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
14.10.2014, 23:49  [ТС]
Metall_Version, спасибо, теперь все работает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.10.2014, 23:49

Передача XML-структуры по сети
Есть БД с таблицей Addressee_mision при помощи WriteXml формирую xml-файл. connection.Open(); SqlDataAdapter adapter...

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

Структуры. Поле name не доступно из-за его уровня защиты
Всем привет, помогите пожалуйста, в чём ошибка? Пишет мол name не доступен из-за его уровня защиты. public struct kadry { ...

Как записать данные в поле структуры, являющееся массивом?
Доброго времени суток! Есть задача: записать данные в поле структуры, являющееся массивом. Понимаю, что использование класса тут уместнее.В...

Передача текста в поле ввода на сайт
Есть некоторое поле ввода на сайте &lt;input id=&quot;txt&quot; class=&quot;texted&quot; type=&quot;text&quot; onblur=&quot;return txt_d();&quot; name=&quot;log&quot; value=&quot;тут...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru