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

Выход из программы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
lesorub_
2 / 2 / 0
Регистрация: 20.02.2011
Сообщений: 51
13.03.2011, 17:19     Выход из программы #1
Доброго времени суток, это опять я
Дописал программу, которая вычисляет произведение матрицы на вектор. Фишка программы заключается в написании собственных функций для вычисления произведения статической матрицы и столбца, и динамической. В конце концов, всё сделано, но мне не нравится одно: когда программа подходит к концу, все вычисления, которые должна произвести программа, завершены, текстовый курсор мигает, консоль не закрывается. Т.е. закрыть консоль можно только принудительно, что не есть хорошо. Помогите, пожалуйста, решить эту проблему. Вот код:

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
#include <iostream>
#include <clocale>
 
using namespace std;
 
#define n 3
#define m 3
 
//функция произведения статической матрицы и вектора
void product_mas_st(double *matrix, double *vector, double *product){
int i, j;
cout << "Произведение (A * B): " << endl;
for (i=0; i<n; i++){ //для i-й строчки матрицы
    product[i] = 0;
    for (j=0; j<m; j++) //для j элементов строчки i
        product[i] += matrix[i*m+j]*vector[j];
}
}
 
//функция произведения динамической матрицы и вектора
void product_mas_dn(double **matrix, double *vector, double *product, int a, int b){
int i, j;
printf ("Произведение (A * B): \n\n");
for (i = 0; i < a; i++){
    product[i] = 0;
    for (j = 0; j < b; j++)
        product[i] += matrix[i][j]*vector[j];
}
}
 
void main(){
setlocale(LC_ALL, "Russian");
 
cout << "Статический массив" << endl;
int i,j;
double matrix_st[n][m], vector_st[m], product_st[n];
cout << "Введите элементы матрицы A[" << n << "][" << m <<"]: ";
for(i=0; i<n; i++) // для строки с номером i вводим j элементов
    for(j=0; j<m; j++) 
        cin >> matrix_st[i][j];
for(i=0; i<n; i++){  //для i-й строки выводим m столбцов
    for(j=0; j<m; j++)
        cout << "\t" << matrix_st[i][j];
    cout << endl << endl;
}
cout << "Введите элементы вектора B[" << m << "]: ";
for(i=0; i<m; i++)
    cin >> vector_st[i];
for(i=0; i<m; i++){
    cout << "\t" <<vector_st[i];
    cout << endl << endl;}
product_mas_st((double*) matrix_st, (double*)vector_st, (double*)product_st);
for(i=0; i<n; i++) //для каждой строки матрицы выводим сумму произведений
    cout << "\t" << product_st[i] << endl << endl;
 
cout << "Динамический массив" << endl;
int a, b;
cout << "Введите кол-во строк и столбцов: ";
cin >> a >> b;
double** matrix_dn = new double*[a];//массив указателей на строки
for(i=0; i<a; i++)
    matrix_dn[i]=new double[b];//для каждой строчки выделяем память под столбцы
double* vector_dn=new double[b];
double* product_dn= new double[a];
cout << "Введите элементы матрицы A[" << a << "][" << b << "]: ";
for(i=0; i<a; i++)
    for(j=0; j<b; j++)
        cin >> matrix_dn[i][j];
cout << endl;
for(i=0; i<a; i++){
    for(j=0; j<b; j++)
        cout << "\t" << matrix_dn[i][j];
    cout << endl << endl;}
cout << "Введите элементы вектора B[" << b <<"]: ";
for(i=0;i<b;i++)
    cin >> vector_dn[i];
cout << endl;
for(i=0; i<b; i++)
    cout << "\t" << vector_dn[i] << endl << endl;
product_mas_dn(matrix_dn,vector_dn, product_dn, a, b);
for(i=0; i<a; i++)
    cout << "\t" << product_dn[i] << endl << endl;
delete[] product_dn;
delete[] vector_dn;
for(i=0; i<a; i++)
    delete[] matrix_dn;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2011, 17:19     Выход из программы
Посмотрите здесь:

C++ выход из программы
C++ Enter = выход из программы
Принудительный выход из программы C++
C++ самопроизвольный выход программы
Выход из программы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Subgrando
40 / 40 / 3
Регистрация: 28.01.2011
Сообщений: 175
13.03.2011, 20:02     Выход из программы #2
вот пример main:

C++
1
2
3
4
int main() {
    // код
    return 0;
}
у тебя есть return 0?
lesorub_
2 / 2 / 0
Регистрация: 20.02.2011
Сообщений: 51
13.03.2011, 21:26  [ТС]     Выход из программы #3
нет, у меня же void
sbhx
 Аватар для sbhx
25 / 19 / 1
Регистрация: 02.02.2011
Сообщений: 90
13.03.2011, 21:28     Выход из программы #4
попробуй так сделать:
C++
1
#include <conio.h>
и в самый конец главной функции поставить:
C++
1
getch();
lesorub_
2 / 2 / 0
Регистрация: 20.02.2011
Сообщений: 51
13.03.2011, 21:37  [ТС]     Выход из программы #5
попробовал с getch(), всёравно виснет. Я вот думаю, может неправильно память очищаю из-под указателей в динамической матрице?
sbhx
 Аватар для sbhx
25 / 19 / 1
Регистрация: 02.02.2011
Сообщений: 90
13.03.2011, 21:53     Выход из программы #6
секундочку, я может быть не врубился, ты хочешь зарыть или задержать окно если закрыть то пользуйся командой exit(0);
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
void main(){
int i;
cin >> i;
if(i == 0){
exit(0);
}
else{
cout << "привет" << endl;
}
}
вот простейший пример, когда если напечатали 0, то выходит, иначе пишет слово привет.
Subgrando
40 / 40 / 3
Регистрация: 28.01.2011
Сообщений: 175
13.03.2011, 22:29     Выход из программы #7
А у меня твоя программа выключается.

Embarcadero C++ Builder 2010.

Добавлено через 2 минуты
Единственное, помни:
консоль не будет закрываться автоматически, если ты запустил программу, предварительно открыв cmd.exe и введя туда путь к ней.

Если надо закрыть окно, то exit(1). А если под Windows, то правильней будет TerminateProcess(GetCurrentProcess(), 1);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2011, 00:06     Выход из программы
Еще ссылки по теме:

C++ выход из программы
Выход из программы C++
C++ Выход из программы

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

Или воспользуйтесь поиском по форуму:
lesorub_
2 / 2 / 0
Регистрация: 20.02.2011
Сообщений: 51
14.03.2011, 00:06  [ТС]     Выход из программы #8
странно, попробовал сейчас на ноуте - там вообще после вычислений выдает ошибку, вот скрин
http://img713.imageshack.us/i/expressscreensaver7.png/

Говорит, что ошибка в строке 52

Добавлено через 1 час 6 минут
проблема решена:dance3:
оказывается, мои подозрение насчет неправильной очистки памяти подтвердились. В самой последней строке надо было для каждой i-той строчки очищать память, а я очищал непойми что.
C++
1
delete[] matrix_dn[i];
вот теперь всё закрывается и ошибок не вылетает
Yandex
Объявления
14.03.2011, 00:06     Выход из программы
Ответ Создать тему
Опции темы

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