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

Не передаются аргументы - C++

Восстановить пароль Регистрация
 
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 233
05.12.2013, 17:50     Не передаются аргументы #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
88
89
90
91
92
93
94
95
96
97
98
float input_matrix();
void change_matrix(float**, int);
void print_matrix(float**, int );
 
int main()
{
    setlocale(LC_ALL, "Russian"); // поддержка вывода русского языка в консоли
 
    float **A;
    int n;
 
    input_matrix();
    printf("Ваша текущая матрица имеет вид:\n\n");  
    print_matrix(A, n);
    change_matrix(A,n);
    printf("Измененная матрица:\n");
    print_matrix(A, n);
 
    for(int i=0;i<n;i++)
    free(A[i]);
    free(A);
 
    getch(); 
 
}
 
float input_matrix()
{
    float **A; //  исходная матрица  
    int n;  // кол-во элементов в матрицы
    int fl=0; // флаг, необходимый при неправильных входных данных.
 
        printf("Введите размерность матрицы:\n");
    do
    {
    if(!scanf("%d", &n))
    {
        system("cls");
        printf("Неверный ввод!\n");
        fflush(stdin);
        fl=1;
    }
    else 
    {
        fl=0;
    
        if(n<1)
            {
                system("cls");
                printf("Неверно указана размерность матрицы. Повторите ввод\n");
            }
    }
    }while(n<1);
//==================================================================
    A=(float**)malloc(n * sizeof(float*));
    if(A==NULL)
    {
        printf("Динамический массив не создан!");
        return 0;
    }
//==================================================================
// Ввод верхнетреугольной матрицы
    printf("Введите элементы верхней треугольной матрицы");
    for(int i=0;i<n;i++)
    {
        A[i]=(float *)calloc(n, sizeof(float*));
        if(A[i]==NULL)
            {
                printf("Динамический массив не создан!");
                return 0;
            }
        for(int j=i;j<n;j++)
        {   
            do
            {
            printf("\nA[%d][%d] = ", i+1, j+1);
            if(!scanf("%f", &A[i][j]))
            {
                system("cls");
                printf("Неверный ввод!\n");
                fflush(stdin);
                fl=1;
            }
            else
            {
                fl=0;
                if(A[i][j]==0)
                    {
                        printf("В матрице не должно быть нулей!:\n");
                        fflush(stdin);
                        j-=1;
                    }
            }
            }while(fl==1);
    }
    }
    return  A,n;
}
После функции ввода, n и матрица остаются не инициализироваными. Почему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
05.12.2013, 17:55     Не передаются аргументы #2
Потому что A - это локальная переменная в функции input_matrix.
rescr1pt
31 / 32 / 1
Регистрация: 03.10.2011
Сообщений: 61
05.12.2013, 18:05     Не передаются аргументы #3
Цитата Сообщение от castaway Посмотреть сообщение
Потому что A - это локальная переменная в функции input_matrix.
Разве динамический объект удаляется при выходе из области видимости?

Добавлено через 3 минуты
Praud, вам нужно, чтобы input_matrix принимал указатель в качестве аргумента. (или же возвращал)
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 233
05.12.2013, 18:23  [ТС]     Не передаются аргументы #4
Я не хочу использовать глобальные переменные. Как можно обойтись без них?

Добавлено через 44 секунды
Цитата Сообщение от rescr1pt Посмотреть сообщение
Разве динамический объект удаляется при выходе из области видимости?

Добавлено через 3 минуты
Praud, вам нужно, чтобы input_matrix принимал указатель в качестве аргумента. (или же возвращал)
Что-то не пойму. Можно код?
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
05.12.2013, 19:48     Не передаются аргументы #5
Нет, не удаляется, поэтому у него еще и утечка памяти.
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 233
05.12.2013, 21:00  [ТС]     Не передаются аргументы #6
Так как нужно написать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2013, 21:27     Не передаются аргументы
Еще ссылки по теме:

C++ Параметры не передаются в конструктор класса
C++ Криво передаются данные: деструктор сработал перед присваиванием
C++ Почему не передаются данные из динамической библиотеки?

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.12.2013, 21:27     Не передаются аргументы #7
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
float** input_matrix(int& n)
{
    float **A; //  исходная матрица  
    
    int fl=0; // флаг, необходимый при неправильных входных данных.
 
        printf("Введите размерность матрицы:\n");
    do
    {
    if(!scanf("%d", &n))
    {
        system("cls");
        printf("Неверный ввод!\n");
        fflush(stdin);
        fl=1;
    }
    else 
    {
        fl=0;
    
        if(n<1)
            {
                system("cls");
                printf("Неверно указана размерность матрицы. Повторите ввод\n");
            }
    }
    }while(n<1);
//==================================================================
    A=(float**)malloc(n * sizeof(float*));
    if(A==NULL)
    {
        printf("Динамический массив не создан!");
        return 0;
    }
//==================================================================
// Ввод верхнетреугольной матрицы
    printf("Введите элементы верхней треугольной матрицы");
    for(int i=0;i<n;i++)
    {
        A[i]=(float *)calloc(n, sizeof(float*));
        if(A[i]==NULL)
            {
                printf("Динамический массив не создан!");
                return 0;
            }
        for(int j=i;j<n;j++)
        {   
            do
            {
            printf("\nA[%d][%d] = ", i+1, j+1);
            if(!scanf("%f", &A[i][j]))
            {
                system("cls");
                printf("Неверный ввод!\n");
                fflush(stdin);
                fl=1;
            }
            else
            {
                fl=0;
                if(A[i][j]==0)
                    {
                        printf("В матрице не должно быть нулей!:\n");
                        fflush(stdin);
                        j-=1;
                    }
            }
            }while(fl==1);
    }
    }
    return  A;
}
В main():
C++
1
2
3
4
float **A;
int n;
 
A = input_matrix(n);
Yandex
Объявления
05.12.2013, 21:27     Не передаются аргументы
Ответ Создать тему
Опции темы

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