Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
#1

Как мне сделать выбор нужного массива? - C++

30.03.2012, 19:31. Просмотров 779. Ответов 18
Метки нет (Все метки)

В зависимости от условия мне нужно работать с одним или другим массивом байт. Но что-то я делаю не правильно. Как мне сделать выбор нужного массива?
C++
1
2
3
4
5
6
7
8
9
10
int SIZE;
PBYTE Mass = new BYTE[SIZE];
 
if(xx = 0) {
    BYTE Mass[] = {0x00,0x3A,0x00,0x00};
}
    else {
    BYTE Mass[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
    }
SIZE = sizeof(Mass) / sizeof(Mass[0]);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2012, 19:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как мне сделать выбор нужного массива? (C++):

Можно ли как то сделать, чтобы программа сама создавала необходимые ей переменные, нужного типа? - C++
Привет :) Учу язык С++. Добрался до темы "Указатели". Теперь могу делать так, чтобы пользователь мог сам выбирать размер массива. ...

Выбор нужного текста в html - C++
Добрый день. Такой вопрос возник. Решил составить базу по одному сайту. Достал html код. Нужные мне значения располагаются так: <tr...

Выбор нужного действия с помощью условия - C++
Есть код на c++ #include <conio.h> #include <iostream> #include <stdlib.h> using namespace std; void main() { int n1,...

Мне дана статическая квадратная матрица, как сделать ее динамической? - C++
Мне дана статическая квадратная матрица, как сделать ее динамической? Т.е. так, чтобы пользователь сам задавал ее размер. И как можно...

Как правильно сделать выбор между С и С++? - C++
В первую очередь интересует с точки зрения потребления ресурсов программы а так же быстродействие Ещё интересно, есть ли операции,...

Как сделать элемент строкового массива элементом числового массива? - C++
Помогите, пожалуйста! :cry: Как поменять элемент строкового массива так, чтобы он стал элементом числового массива? Есть ли в С++ аналог...

18
igorrr37
1837 / 1455 / 224
Регистрация: 21.12.2010
Сообщений: 2,410
Записей в блоге: 11
30.03.2012, 19:49 #2
C++
1
if(xx = 0)
0 == xx
1
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 20:51  [ТС] #3
Никак не привыкну.. )))

Но все равно почему-то не выходит... Задаю хх=1, а SIZE = 4 получается, а должно быть 7 по идее...

Добавлено через 23 минуты
Как понимаю в массив ничего не прописывается... Вернее что-то туда вбивается, но не то что мне нада.. (((
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 21:05 #4
Цитата Сообщение от Битл Посмотреть сообщение
Никак не привыкну.. )))

Но все равно почему-то не выходит... Задаю хх=1, а SIZE = 4 получается, а должно быть 7 по идее...

Добавлено через 23 минуты
Как понимаю в массив ничего не прописывается... Вернее что-то туда вбивается, но не то что мне нада.. (((
ты ж заново как-то объявляешь в ифе переменную Mass. Если честно, то не совсем я понимаю это И чему равен SIZE изначально? 0? Т.е. ты создаёшь динамический массив на 0 элементов?
0
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 21:11  [ТС] #5
Цитата Сообщение от Nekto Посмотреть сообщение
ты ж заново как-то объявляешь в ифе переменную Mass.
В том то и дело, что если не объявить Mass до ИФа, то он будет не инициализирован. Т.е. я его объявляю, потом в зависимости от условия наполняю... Массив получается динамическим...
Цитата Сообщение от Nekto Посмотреть сообщение
И чему равен SIZE изначально? 0? Т.е. ты создаёшь динамический массив на 0 элементов?
угу, как-то так ))
Но у меня получается что условие отрабатывает правильно, а вот массив задается на непонятные 4 байта... Никак не въеду где портачу...
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 21:20 #6
Цитата Сообщение от Битл Посмотреть сообщение
В том то и дело, что если не объявить Mass до ИФа, то он будет не инициализирован. Т.е. я его объявляю, потом в зависимости от условия наполняю... Массив получается динамическим...
угу, как-то так ))
Но у меня получается что условие отрабатывает правильно, а вот массив задается на непонятные 4 байта... Никак не въеду где портачу...
Тот Mass, который в ифе, существует только внутри { }. Ты хочешь создать на 4 или 7 элементов? Выделять память нужно после того, как ты определился, а не до.
0
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 21:30  [ТС] #7
Цитата Сообщение от Nekto Посмотреть сообщение
Тот Mass, который в ифе, существует только внутри { }.
Вот блин... А как мне его использовать вне {} ???
Цитата Сообщение от Nekto Посмотреть сообщение
Ты хочешь создать на 4 или 7 элементов?
Я хочу сделать универсальный вариант... Чтоб я задавал произвольные массивы и они отрабатывали...

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int SIZE;
PBYTE Mass = new BYTE[SIZE];
 
if(xx = 0) {
    BYTE Mass[] = {0x00,0x3A,0x00,0x00};
}
    else {
    BYTE Mass[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
    }
SIZE = sizeof(Mass) / sizeof(Mass[0]);
 
for (int  i = 0; i <SIZE; i++) {
    cerr << hex << Prob[i] << endl;
}
Вывести элементы массива не выйдет по условию???
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 21:41 #8
Цитата Сообщение от Битл Посмотреть сообщение
Вот блин... А как мне его использовать вне {} ???

Я хочу сделать универсальный вариант... Чтоб я задавал произвольные массивы и они отрабатывали...
Это внутри какой-то функции будет? Что будет входящим параметром, от которого всё зависит? x?
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
#include <iostream>
using namespace std;
int main()
{
 int xx=1;
 int SIZE;
 char* Mass;
 if(xx == 0) 
  {
   SIZE=4;
   Mass = new char [SIZE];
   Mass[0]=0x00;
   Mass[1]=0x3A;
   Mass[2]=0x00;
   Mass[3]=0x00;
  }
 else 
  {
   SIZE=7;
   Mass = new char [SIZE];
   Mass[0]=0x00;
   Mass[1]=0x01;
   Mass[2]=0x0A;
   Mass[3]=0x84;
   Mass[4]=0x0F;
   Mass[5]=0x00;
   Mass[6]=0x00;
  }
 for (int i=0;i<SIZE;i++)
  cout<<Mass[i]<<" ";
 system("pause");
 return 0;
}
Добавлено через 2 минуты
char замени на BYTE или что там тебе надо
0
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 23:01  [ТС] #9
Вводить каждый элемент массива отдельно??? О_О Ненене... может все же есть правильный способ?
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
include <iostream>
 
using namespace std;
 
int main()
 
{
 
 int xx=1;
int SIZE;
PBYTE Mass;
 
if(xx = 0) {
    BYTE Mass[] = {0x00,0x3A,0x00,0x00};
        SIZE = sizeof(Mass) / sizeof(Mass[0]);
}
    else {
    BYTE Mass[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
        SIZE = sizeof(Mass) / sizeof(Mass[0]);
    }
 
 
for (int  i = 0; i <SIZE; i++) {
    cout<<Mass[i]<<" ";
}
 
 system("pause");
 
 return 0;
 
}
Выводятся какие-то кракозября с массива байт. Как правильно делать вывод бай?
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 23:34 #10
Цитата Сообщение от Битл Посмотреть сообщение
Выводятся какие-то кракозября с массива байт. Как правильно делать вывод бай?
C++
1
    cout<<(int)Mass[i]<<" ";
Или хз в каком ты виде хочешь это видеть.
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 23:35 #11
Но я вообще не понимаю, что ты пытаешься сделать SIZE= в ифе...
0
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
31.03.2012, 05:29  [ТС] #12
Ну, вот выведи у себя
C++ (Qt)
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
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
 
{
 
 int xx=1;
int SIZE;
PBYTE Mass;
 
if(xx == 0) {
    BYTE Mass[] = {0x00,0x3A,0x00,0x00};
        SIZE = sizeof(Mass) / sizeof(Mass[0]);
}
    else {
    BYTE Mass[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
        SIZE = sizeof(Mass) / sizeof(Mass[0]);
    }
 
 
for (int  i = 0; i <SIZE; i++) {
    cout<< hex<<(int)Mass[i]<<" ";
}
 
 system("pause");
 
 return 0;
 
}
Байты не совпадают. В массиве что-то есть, но не то что я ему задаю... О_о
Цитата Сообщение от Nekto Посмотреть сообщение
Но я вообще не понимаю, что ты пытаешься сделать SIZE= в ифе...
вычисляю длину массива... там ошибки вроде нет...
0
igorrr37
1837 / 1455 / 224
Регистрация: 21.12.2010
Сообщений: 2,410
Записей в блоге: 11
31.03.2012, 08:53 #13
Битл, созданный указатель надо бы обнулять
PBYTE Mass = nullptr; // или 0
во - вторых, PBYTE Mass и BYTE Mass[] это два разных объекта с одинаковым именем, причём второй создаётся в теле оператора if{}else{} и при выходе за его пределы удаляется из стека(насколько понимаю)
1
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
31.03.2012, 18:44  [ТС] #14
Цитата Сообщение от igorrr37 Посмотреть сообщение
во - вторых, PBYTE Mass и BYTE Mass[] это два разных объекта с одинаковым именем, причём второй создаётся в теле оператора if{}else{} и при выходе за его пределы удаляется из стека(насколько понимаю)
Ок... Получается невозможно таким способом задать условие при котором выбирать с каким из массивов работать???
Есть способы решения такой задачи или нет??? Неужели нет???

В теле оператора так же вычисляется и SIZE, но при выходе его значение сохраняется...
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 19:17 #15
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
#include <iostream>
#include <windows.h>
using namespace std;
BYTE* create_array(int xx,int *size)
{
 if(xx == 0)
  {
   *size=4;
   BYTE* mass=new BYTE [*size];
   BYTE mas[] = {0x00,0x3A,0x00,0x00};
   for (int i=0;i<*size;i++) cout<<(int)mas[i]<<" "; //можно удалить
   cout<<endl;                                                //можно удалить
   for (int i=0;i<*size;i++) mass[i]=mas[i];
   return mass;
  }
 else
  {
   *size=7;
   BYTE* mass=new BYTE [*size];
   BYTE mas[] = {0x00,0x01,0x0A,0x84,0x0F,0x00,0x00};
   for (int i=0;i<*size;i++) cout<<(int)mas[i]<<" "; //можно удалить
   cout<<endl;                                                //можно удалить
   for (int i=0;i<*size;i++) mass[i]=mas[i];
   return mass;
  }
}
int main()
{
 int x=0;
 int SIZE;
 BYTE* Mass=create_array(x,&SIZE);
 for (int i=0;i<SIZE;i++)
  cout<<(int)Mass[i]<<" ";
 cout<<endl;
 system("pause");
 return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2012, 19:17
Привет! Вот еще темы с ответами:

Как вытащить элемент из массива не используя цикл и выбор? - C++
Вот собственно код: const int size = 30; char name; char last_name; char grade = {'A', 'B',...

Как считать текст до нужного символа? - C++
Код void Obrabotka() { ofstream out_file(&quot;out.txt&quot;); file.open(&quot;text.txt&quot;); char c; while(!file.eof()) { ...

Мне интересно, кто смогЁт это сделать?)) - C++
1.Программирование циклических процессов: Дано натуральное число n та действительное число х. Найти сумму 10 слагаемых, каждый из...

Есть двумерный массив символов, в каждой строке находится номер, мне надо к каждой строке добавить "8029" как это сделать? - C++
Есть двумерный массив символов, в каждой строке находится номер, мне надо к каждой строке добавить &quot;8029&quot; как это сделать? Есть функция...


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

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

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