Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
swooppy
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 2
1

Не получается правильно передать параметры в функцию

09.05.2012, 08:55. Просмотров 546. Ответов 2
Метки нет (Все метки)

Совсем замучался. Решил делать не совсем так, как в методе и закопался. Вопрос вроде элементарный, но уже не знаю что попробовать чтобы заработало. Наверное взгляд замылился и не вижу чего-то очевидного. Надо построить стек. Пока только построить и распечатать для контроля. Просьба не особо критиковать алгоритм и количество передаваемых в функции параметров - потом поправлю. Не могу разобраться почему после возврата из push в main ничего не передается - headPnt и endPnt и все что внутри в дебаггере показывается как нули. Где какой амперсон забыл поставить ?

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
#include <stdio.h> 
#include <stdlib.h> 
 
struct Record 
{ 
    char symbol; 
    struct Record *pnext; 
    struct Record *pprev; 
}; 
 
void push(struct Record *phead, struct Record *plast); 
void print(struct Record *phead, struct Record *plast); 
 
 
void main() 
 
{ 
    struct Record *headPnt = NULL, *endPnt = NULL; 
    char sym; 
    int i = 0; 
    do 
    { 
        printf("\n1. Push\n"); // вывод меню 
        printf("2. Pop\n"); 
        printf("3. Print\n"); 
        printf("4. Convert stack to queue\n"); 
        printf("0. Exit\n"); 
        scanf("%d", &i); 
        switch (i) // переключатель выбора действия 
        { 
        case 1: push(headPnt, endPnt); 
            break; 
        case 3: print(headPnt, endPnt); 
            break; 
        }; 
    } 
    while (i != 0); 
    exit(0); // завершение программы 
} 
 
void push(struct Record *phead, struct Record *plast) 
{ 
    char sym; 
    printf("Input symbol : "); 
    getchar(); 
    sym = getchar(); 
    struct Record *newRec = (struct Record*) malloc(sizeof (struct Record));  
    if (newRec != NULL) 
    { 
        newRec->symbol = sym; 
        newRec->pnext = phead; 
        if (phead == NULL) plast = newRec; 
        phead = newRec;  
    } 
    else 
        printf("Memory allocation error !!!"); 
} 
 
 
void print(struct Record *phead, struct Record *plast) 
{ 
    struct Record *ptemp; 
    ptemp = plast; 
 
    while (ptemp != NULL) 
    { 
        printf("->%c", ptemp->symbol); 
        ptemp = ptemp->pnext; 
    } 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2012, 08:55
Ответы с готовыми решениями:

Не получается передать правильно параметр в функцию
Помогите исправить. Не получается передать правильно параметр в функцию. #include &quot;header.h&quot; ...

Как правильно передать массив в функцию?
В этой задаче я ввожу двухмерный массив с 6 чисел, передаю его в функцию, потом получаю новый масив...

Как правильно передать два массива в функцию
Всем привет. Как правильно передать в функцию два массива? Один динамический, а второй...

Как при срабатывании SIGINT правильно передать значение переменной i в функцию closing
Имеется код: #include &lt;signal.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;unistd.h&gt; ...

Не получается правильно записать указатель, чтобы в основную функцию main (в операторе printf) вызывалась функция podproga
Не получается правильно записать указатель, чтобы в основную функцию main (в операторе printf)...

2
grizlik78
Эксперт С++
2028 / 1508 / 207
Регистрация: 29.05.2011
Сообщений: 3,132
09.05.2012, 10:37 2
Древняя проблема. Внутри функции push изменяются не сами указатели из главной функции, а их копии.
Сравнивай:
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
#include <stdio.h>
#include <stdlib.h>
 
void func1(int *p)
{
    p = (int*)malloc(3*sizeof(*p));
    p[0] = 1; p[1] = 2; p[2] = 3;
}
 
void func2(int **p)
{
    *p = (int*)malloc(3*sizeof(*p));
    (*p)[0] = 1; (*p)[1] = 2; (*p)[2] = 3;
}
 
 
int main(void)
{
    int *p1 = NULL;
    int *p2 = NULL;
 
    func1(p1);
 
    if (p1 != NULL)
    {
        printf("p1[]: %d %d %d\n", p1[0], p1[1], p1[2]);
    }
    else
    {
        printf("p1 == NULL\n");
    }
 
    func2(&p2);
 
    if (p2 != NULL)
    {
        printf("p2[]: %d %d %d\n", p2[0], p2[1], p2[2]);
    }
    else
    {
        printf("p2 == NULL\n");
    }
 
    return 0;
}
1
swooppy
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 2
11.05.2012, 16:33 3
спасибо, разобрался
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2012, 16:33

Как правильно задать параметры Arc?
#include &lt;windows.h&gt; #include &lt;conio.h&gt; DWORD...

Не получается передать аргумент argv[1]
потихоньку дошел до операции с файлами,но наткнулся на такую ошибку:программа не хочет передавать...

Не получается передать адрес строки в asm вставке
Доброе время суток. При выполнении данного кода возникает две ошибки: 1 не получается передать...


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

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

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