Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Barok
7 / 7 / 0
Регистрация: 07.12.2010
Сообщений: 49
#1

Работа с массивами в динамической памяти - C++

07.12.2010, 20:41. Просмотров 407. Ответов 6
Метки нет (Все метки)

Задача такова. Необходимо создать 2 массива в динамической памяти. Обращение к элементам массива - через косвенную адресацию. Вывести на экран первым тот массив, произведение элементов которго наибольшее. Я написал вроде как, но беда в том, что сразу же после ввода двух массивов, закрывается окно консоли. Подскажите в чем моя ошибка и как хоть примерно её мужно устранить?

P.S. я только начал изучать C++

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
#include <iostream>
using namespace std;
 
int* vvod(int *mass, int size){
  mass=new int[size];
  for(int i=0;i<size;i++){
    cout<<" element["<<i<<"]=";
    cin>>mass[i];
  }
  return mass;
}
 
int umn(int mass[], int size){
  int s=1;
  for(int i=0;i<size;i++)
    s*=mass[i];
  return s;
}
 
void print(int mass[], int size){
  for(int i=0; i<size; i++)
    cout<<mass[i]<<" ";
  cout<<endl;
}
 
int main(){
  int n, m, s1=1, s2=1;
  cout<<"Vvedite razmernost A: ";
  cin>>n;
  cout<<endl<<"Vvedite elementi A: "<<endl;
  int* A=new int[n];
  A=vvod(A,n);
  s1=umn(A,n);
  cout<<"Vvedite razmernost B: ";
  cin>>m;
  cout<<endl<<"Vvedite elementi B: "<<endl;
  int* B=new int[m];
  B=vvod(B,m);
  s2=umn(B,m);
  if(s1>s2){
    print(A,n);
    print(B,n);
  }
  else{
    print(B,n);
    print(A,n);
  }
  std::cin.get();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.12.2010, 06:57     Работа с массивами в динамической памяти #2
C++
1
2
    std::cin.get();
    std::cin.get();
C++
1
2
    std::cin.ignore();
    std::cin.get();
Barok
7 / 7 / 0
Регистрация: 07.12.2010
Сообщений: 49
08.12.2010, 10:16  [ТС]     Работа с массивами в динамической памяти #3
Цитата Сообщение от accept Посмотреть сообщение
C++
1
2
    std::cin.get();
    std::cin.get();
C++
1
2
    std::cin.ignore();
    std::cin.get();
Большое спасибо! Помогло. Ещё заметил 2 ошибки сам у себя в условии if..else (там где B надо m вместо n). Только мне не понятен смысл почему надо именно два раза прописывать std::cin.get() и std::cin.ignore?? И правильное ли использование этой функции в данной программе? Можно узнать в чём конкретно ошибка (если таковая имеется), чтобы я в крайнем случае мог переписать код.
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.12.2010, 21:25     Работа с массивами в динамической памяти #4
C++
1
    cin >> m;
когда вводишь и нажимаешь <ret>, в m сохраняется число, а '\n' остаётся в стандартном потоке ввода, поэтому первый cin.get() считывает этот символ перевода строки

C++
1
    cin >> n;
точно также оставляет символ перевода строки в потоке, но cin >> m; сначала пропускает все пробельные символы, а уже потом считывает число
Barok
7 / 7 / 0
Регистрация: 07.12.2010
Сообщений: 49
08.12.2010, 21:47  [ТС]     Работа с массивами в динамической памяти #5
если не ошибаюсь, в С (возможно и в С++) есть такая функция fflush() для очистки буфера. Она была бы тут уместна?
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.12.2010, 23:35     Работа с массивами в динамической памяти #6
не, она по стандарту не может использоваться для потоков ввода, только для потоков вывода
хотя расширения компиляторов типа gcc, msvc делают её такой, что она может сбрасывать данные потоков ввода, но расширения не гарантируются, понимаешь, они даже не обязаны в разных компиляторах работать одинаково (прога, собранная на одном компиляторе, будет работать и собранная на другом будет работать, но нет гарантии, что две эти проги будут работать идентично)
cin.ignore() вроде может принимать число ещё, сколько символов отбросить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2010, 00:48     Работа с массивами в динамической памяти
Еще ссылки по теме:

C++ выделение динамической памяти
C++ Выделение динамической памяти
C++ Удаление динамической памяти
C++ Переменные в динамической памяти!
C++ Освобождение динамической памяти

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

Или воспользуйтесь поиском по форуму:
Barok
7 / 7 / 0
Регистрация: 07.12.2010
Сообщений: 49
09.12.2010, 00:48  [ТС]     Работа с массивами в динамической памяти #7
Ещё раз огромное спасибо, accept. Ответы получил на свои вопросы, топик думаю можно закрыть
Yandex
Объявления
09.12.2010, 00:48     Работа с массивами в динамической памяти
Ответ Создать тему
Опции темы

Текущее время: 01:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru