Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу заставить работать этот код! изучение С++ 
:(
    Опции темы
Deposit
Дата 17.10.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.10.2005

Репутация: нет
Всего: нет



Дали мне код программы с ошибками, некоторые исправил, а оставшиеся не могу понять в чем причина?
Правильно ли сделал, что закоментировал функцию ForEach? Помоему она тут не нужна...

Код

#include <stdio.h>
#include <alloc.h>
#include <string.h>
#include <stdlib.h>
//////////////////////////////////
// описание элемента списка    //
//////////////////////////////////
typedef struct ListElTag {
struct ListElTag *left;  //связь влево
struct ListElTag *right; //связь вправо
char *name;    //хранимый указатель на данные
} LISTEL;
///////////////////////////////////
// описание очереди       ///
///////////////////////////////////
typedef struct ListTag {
LISTEL *head;    //указатель на голову
LISTEL *tail;    //указатель на хвост
int size;    //количесво элементов в очереди
} LIST;
//////////////////////////////////////
// инициализация очереди    //
//////////////////////////////////////
void InitList(LIST *list)
{
printf("инициализация списка\n");
list->head=list->tail=NULL;
list->size=0;
}
//////////////////////////////////////
void AddList(LIST *list,char *name)
{
int len=strlen(name);
//выделение памяти под новый элемент
LISTEL *listel=(LISTEL *)malloc(sizeof(listel));
if(listel==NULL) return;
listel->name=malloc(len+1);    //выделение памяти по строку
if(listel->name==NULL) return;
strcpy(listel->name,name);    //копировать строку
listel->left=NULL;
listel->right=NULL;
printf("добавление элемента\n");
//организация связи
if(list->head==NULL) //список пуст
{
list->head=list->tail=listel;
}
else //добавление элемента в конец очереди
{
list->tail->left=listel;
listel->right=list->tail;
list->tail=listel;
}
list->size++;
}
/////////////////////////////////////
// Удаление элемента из очереди    //
/////////////////////////////////////
void DeleteEl(LIST *list)
{
LISTEL *ptr;
printf("удаление элемента\n");
if(list->head==NULL) return; //очередь пуста
ptr=list->head;
if(ptr==list->tail) //в очереди один элемент
{
list->head=list->tail=NULL;
}
else  //в очереди несколько элементов
{
list->head=ptr->left;
list->head->right=NULL;
}
list->size--;
}
///////////////////////////////////////////
// Вывод всех элементов списка    ///
///////////////////////////////////////////
OutList(LIST *list)
{
LISTEL *ptr; printf("вывод писка\n");
 for(ptr=list->head; ptr!=NULL; ptr=ptr->left)
printf("%s\n",ptr->name);  
}
/////////////////////////////////////////// 
// удаление всех элементов списка        // ///////////////////////////////////////////
void DeleteAll(LIST *list)
{
LISTEL *ptr, *tmp;
printf("удаление очереди\n"); for(ptr=list->head; ptr!=NULL;)
{
tmp=ptr->left;
free(ptr->name);
free(ptr);
ptr=tmp;
}
} //////////////////////////////////////////// 
void Out(char *str)
{
printf("++++ %s ++++\n",str);
}
////////////////////////////////////////////
void ForEach(LISTEL *beg, LISTEL *end, void (*func)()) 
LISTEL *ptr; ptr=beg; while(1)
{
 func(ptr->name);
 if(ptr==end) break;
else ptr=ptr->left;
}
}
///////////////////////////////////////////
// нахождение заданного имени в списке   //
///////////////////////////////////////////
LISTEL* FindName(LIST *list, char *name)
{
LISTEL *ptr;
printf("поиск имени\n"); 
for(ptr=list-head;ptr!=NULL;ptr=ptr->left)
if(strcmp(name,ptr->name)==0) return ptr; 
return NULL;
}
///////////////////////////////////////////
// удаление заданного имени из списка    //
///////////////////////////////////////////
int DeleteName(LIST *list, char *name)
{
LISTEL *ptr;
printf("удаление имени %s\n",name);
if((ptr=FindName(list,name))==NULL) //указанное имя не найдено
                           return 0;
//удаление единственного элемента
if(ptr==list->head&&ptr==list->tail) 
{
list->head=list->tail=NULL;
}
else
if(ptr==list->tail) //удаление  хвоста
{
list->tail=list->tail->right;
list->tail->left=NULL;
}
else
if(ptr==list->head) //удаление головы
{
list->head=list->head->left;
list->head->right=NULL;
}
else //удаление из середины
{
ptr->left->right=ptr->right;
ptr->right->left=ptr->left;
}
free(ptr);
}
///////////////////////////////////////////////////
// сортировка имен в лексикографическом порядке  //
///////////////////////////////////////////////////
void SortName(LIST *list)
{
int key=1;
char *tmp;
LISTEL *ptr; printf("сортировка\n"); 
while(key)
{
key=0;
for(ptr=list->head; ptr!=list->tail; ptr=ptr->left) 
 {
if(strcmp(ptr->name,ptr->left->name)<0)
{
tmp=ptr->name;
ptr->name=ptr->left->name;
ptr->left->name=tmp;
key=1;
}
}
}
}
//////////////////////////////////////////////////
// построение списка слов из строки символов    //
//////////////////////////////////////////////////
void MakeListWord(char *exp,LIST *list)
{
char *begword, *word;
int len;
int i;
while(1)

while(*exp==' ') exp++;
begword=exp;
len=0;
while(*exp)    //определение длины слова
{
if(*exp!=' ')
{
len++;
exp++;
}
else break;
}
if(len==0) return;
//выделение слова
word=malloc(len+1);
for(i=0; i<len; i++) word[i]=begword[i];
word[len]='\0';
//запись слова в список
AddList(list,word); free(word);
}
///////////////////////////////////////////////////
main()
{
LIST list;
InitList(&list);
AddList(&list,"Петя");
AddList(&list,"Саша");
AddList(&list,"Миша");
AddList(&list,"Катя");
OutList(&list);
SortName(&list);
OutList(&list);
DeleteName(&list,"Миша");
DeleteName(&list,"Петя");
OutList(&list);
//ForEach(list.head,list.head->left,Out);
DeleteAll(&list);
InitList(&list);
MakeListWord("Привет Всем Вам !!!",&list);
OutList(&list);
DeleteAll(&list);
}


PM MAIL   Вверх
Дрон
Дата 17.10.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата(Deposit @ 17.10.2005, 19:17)
Дали мне код программы с ошибками, некоторые исправил, а оставшиеся не могу понять в чем причина?

Телепаты в отпуске smile smile smile smile

Какие ошибки-то остались?

Это сообщение отредактировал(а) Дрон - 17.10.2005, 18:25


--------------------
Да. Именно так.
PM   Вверх
Deposit
Дата 17.10.2005, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.10.2005

Репутация: нет
Всего: нет



Вот эти ошибки:
Error MY_PRO~1\ZADANI~3.CPP 38: Cannot convert 'void *' to 'char *'
Warning MY_PRO~1\ZADANI~3.CPP 56: 'len' is assigned a value that is never use
Warning MY_PRO~1\ZADANI~3.CPP 193: Unreachable code
Error MY_PRO~1\ZADANI~3.CPP 206: Cannot convert 'void *' to 'char *'
С использование malloc не знаком потому и не знаю как исправить...

и еще, что значит унарная звездочка после LISTEL ?
LISTEL *listel=(LISTEL *)malloc(sizeof(listel));




PM MAIL   Вверх
Дрон
Дата 17.10.2005, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Deposit

Warning -- это не ошибки а предупреждения.

В malloc возвращает void*, а С++ (в отличие от Си) требует, чтобы void* явно приводился к нужному типу, т.е. надо писать так:
Код
listel->name=(char*)malloc(len+1);    //выделение памяти по строку

и так:
Код
word=(char*)malloc(len+1);


Это не "унарная звёздочка" smile, а обозначение указателя: указатель на структуру LISTEL.

Саму программу я не смотрел -- разбираться некогда, может ещё кто подскажет smile




--------------------
Да. Именно так.
PM   Вверх
Pogreb
Дата 18.10.2005, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 69
Регистрация: 17.10.2005

Репутация: нет
Всего: нет



Вот немного подредактированная прога.
И еще у тебя нет описания функции func();
Пример использования malloc:
Код

char *word;
word=(char*)malloc(len+1*sizeof(char));

len+1 это кол-во символов, размер которых char.

#include<stdio.h>
#include<alloc.h>
#include<string.h>
#include<stdlib.h>
//////////////////////////////////
// описание элемента списка    //
//////////////////////////////////
typedef struct ListElTag {
struct ListElTag *left;//связь влево
struct ListElTag *right; //связь вправо
char *name;//хранимый указатель на данные
} LISTEL;
///////////////////////////////////
// описание очереди       ///
///////////////////////////////////
typedef struct ListTag{
LISTEL *head;//указатель на голову
LISTEL *tail;//указатель на хвост
int size;//количесво элементов в очереди
}LIST;
//////////////////////////////////////
// инициализация очереди    //
//////////////////////////////////////
void InitList(LIST*list)
{
printf("инициализация списка\n");
list->head=list->tail=NULL;
list->size=0;
}
//////////////////////////////////////
void AddList(LIST*list,char*name)
{
int len=strlen(name);
//выделение памяти под новый элемент
LISTEL*listel=(LISTEL*)malloc(sizeof(listel));
if(listel==NULL)return;
listel->name=(char*)malloc(len+1*sizeof(char));//выделение памяти по строку
if(listel->name==NULL)return;
strcpy(listel->name,name);//копировать строку
listel->left=NULL;
listel->right=NULL;
printf("добавление элемента\n");
//организация связи
if(list->head==NULL)//список пуст
{
list->head=list->tail=listel;
}
else //добавление элемента в конец очереди
{
list->tail->left=listel;
listel->right=list->tail;
list->tail=listel;
}
list->size++;
}
/////////////////////////////////////
// Удаление элемента из очереди    //
/////////////////////////////////////
void DeleteEl(LIST *list)
{
LISTEL *ptr;
printf("удаление элемента\n");
if(list->head==NULL)return;//очередь пуста
ptr=list->head;
if(ptr==list->tail)//в очереди один элемент
{
list->head=list->tail=NULL;
}
else//в очереди несколько элементов
{
list->head=ptr->left;
list->head->right=NULL;
}
list->size--;
}
///////////////////////////////////////////
// Вывод всех элементов списка    ///
///////////////////////////////////////////
void OutList(LIST*list)
{
LISTEL*ptr;printf("вывод писка\n");
for(ptr=list->head;ptr!=NULL;ptr=ptr->left)
printf("%s\n",ptr->name);
}
/////////////////////////////////////////// 
// удаление всех элементов списка        // ///////////////////////////////////////////
void DeleteAll(LIST*list)
{
LISTEL*ptr,*tmp;
printf("удаление очереди\n");for(ptr=list->head;ptr!=NULL;)
{
tmp=ptr->left;
free(ptr->name);
free(ptr);
ptr=tmp;
}
} //////////////////////////////////////////// 
void Out(char*str)
{
printf("++++ %s ++++\n",str);
}
////////////////////////////////////////////
void ForEach(LISTEL*beg,LISTEL *end,void(*func)()){
LISTEL *ptr;
ptr=beg;
while(1)
{
func(ptr->name);
if(ptr==end)break;
else ptr=ptr->left;
}
}
///////////////////////////////////////////
// нахождение заданного имени в списке   //
///////////////////////////////////////////
LISTEL*FindName(LIST*list,char *name)
{
LISTEL*ptr;
printf("поиск имени\n");
for(ptr=list->head;ptr!=NULL;ptr=ptr->left)
if(strcmp(name,ptr->name)==0)return ptr;
return NULL;
}
///////////////////////////////////////////
// удаление заданного имени из списка    //
///////////////////////////////////////////
int DeleteName(LIST *list,char*name)
{
LISTEL*ptr;
printf("удаление имени %s\n",name);
if((ptr=FindName(list,name))==NULL)//указанное имя не найдено
return 0;
//удаление единственного элемента
if(ptr==list->head&&ptr==list->tail)
{
list->head=list->tail=NULL;
}
else
if(ptr==list->tail)//удаление  хвоста
{
list->tail=list->tail->right;
list->tail->left=NULL;
}
else
if(ptr==list->head)//удаление головы
{
list->head=list->head->left;
list->head->right=NULL;
}
else//удаление из середины
{
ptr->left->right=ptr->right;
ptr->right->left=ptr->left;
}
free(ptr);
}
///////////////////////////////////////////////////
// сортировка имен в лексикографическом порядке  //
///////////////////////////////////////////////////
void SortName(LIST *list)
{
int key=1;
char*tmp;
LISTEL *ptr;printf("сортировка\n");
while(key)
{
key=0;
for(ptr=list->head;ptr!=list->tail;ptr=ptr->left)
{
if(strcmp(ptr->name,ptr->left->name)<0)
{
tmp=ptr->name;
ptr->name=ptr->left->name;
ptr->left->name=tmp;
key=1;
}
}
}
}
//////////////////////////////////////////////////
// построение списка слов из строки символов    //
//////////////////////////////////////////////////
void MakeListWord(char *exp,LIST *list)
{
char *begword,*word;
int len;
int i;
while(1){
while(*exp==' ')exp++;
begword=exp;
len=0;
}
while(*exp)//определение длины слова
{
if(*exp!=' ')
{
len++;
exp++;
}
else break;
}
if(len==0) return;
//выделение слова
word=(char*)malloc(len+1*sizeof(char));
for(i=0;i<len;i++)word[i]=begword[i];
word[len]='\0';
//запись слова в список
AddList(list,word);free(word);
}
///////////////////////////////////////////////////
main()
{
LIST list;
InitList(&list);
AddList(&list,"Петя");
AddList(&list,"Саша");
AddList(&list,"Миша");
AddList(&list,"Катя");
OutList(&list);
SortName(&list);
OutList(&list);
DeleteName(&list,"Миша");
DeleteName(&list,"Петя");
OutList(&list);
//ForEach(list.head,list.head->left,Out);
DeleteAll(&list);
InitList(&list);
MakeListWord("Привет Всем Вам !!!",&list);
OutList(&list);
DeleteAll(&list);
}


 ! 
 
И здесь не забываем про тэги "code" :)


Это сообщение отредактировал(а) sergej.z - 18.10.2005, 01:19
PM MAIL   Вверх
Dov
Дата 18.10.2005, 06:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Вот так у меня работает (VC++6.0)
Код
#include <stdio.h>  
#include <malloc.h>  // или <alloc.h>
#include <string.h> 
#include <stdlib.h> 
#include <windows.h>

// описание элемента списка    
typedef struct ListElTag
{
    struct ListElTag*   left;             //связь влево    
    struct ListElTag*   right;            //связь вправо   
    char*               name;             //хранимый указатель на данные 
} LISTEL;

// описание очереди      
typedef struct ListTag
{
    LISTEL* head;                         //указатель на голову  
    LISTEL* tail;                         //указатель на хвост   
    int     size;                         //количесво элементов в очереди    
} LIST; 

// инициализация очереди    
void InitList(LIST* list)
{
    printf("инициализация списка\n");   
    list->head = list->tail = NULL; 
    list->size = 0;
}

//////////////////////////////////////  
void AddList(LIST* list, char* name)
{
    int     len     = strlen(name);

    //выделение памяти под новый элемент    
    LISTEL* listel  = (LISTEL*)malloc(sizeof(listel));

    if(listel == NULL)
        return;

    listel->name = (char*)malloc(len + 1);//выделение памяти по строку

    if(listel->name == NULL)
        return;

    strcpy(listel->name, name);           //копировать строку  
    listel->left = NULL;    
    listel->right = NULL;   
    printf("добавление элемента\n");

    //организация связи 
    if(list->head == NULL)                //список пуст
        list->head = list->tail = listel;
    else                                  //добавление элемента в конец очереди
    {
        list->tail->left = listel;  
        listel->right = list->tail; 
        list->tail = listel;
    }  

    list->size++;
}   

// Удаление элемента из очереди 
void DeleteEl(LIST* list)
{
    LISTEL* ptr;

    printf("удаление элемента\n");

    if(list->head == NULL)
        return;                           //очередь пуста 

    ptr = list->head;

    if(ptr == list->tail)                 //в очереди один элемент
        list->head = list->tail = NULL;
    else                                  //в очереди несколько элементов
    {
        list->head = ptr->left; 
        list->head->right = NULL;
    } 

    list->size--;

    free(ptr);
}

// Вывод всех элементов списка   
void OutList(LIST* list)
{
    LISTEL* ptr;

    printf("вывод списка: \n");   
    for(ptr = list->head; ptr != NULL; ptr = ptr->left)
        printf("%s\n", ptr->name);
} 

// удаление всех элементов списка        
void DeleteAll(LIST* list)
{
    LISTEL* ptr, * tmp; 

    printf("удаление очереди\n");
    for(ptr = list->head; ptr != NULL;)
    {
        tmp = ptr->left;  
        ptr = tmp;
    }

    free(ptr);
    free(tmp);
} 

void Out(char* str)
{
    printf("++++ %s ++++\n", str);
} 

////////////////////////////////////////////    
void ForEach(LISTEL* beg, LISTEL* end, void (*func)(char*))
{
    LISTEL* ptr;

    ptr = beg;
    while(1)
    {
        func(ptr->name);
        if(ptr == end)
            break;
        else
            ptr = ptr->left;
    }
}

// нахождение заданного имени в списке    
LISTEL* FindName(LIST* list, char* name)
{
    LISTEL* ptr;

    printf("поиск имени\n");    
    for(ptr = list->head; ptr != NULL; ptr = ptr->left)
        if(strcmp(name, ptr->name) == 0)
            return ptr;  

    return NULL;
}

// удаление заданного имени из списка    
void DeleteName(LIST* list, char* name)
{
    LISTEL* ptr; 

    printf("удаление имени %s\n", name);    
    if((ptr = FindName(list, name)) == NULL) //указанное имя не найдено
        return; 

    //удаление единственного элемента   
    if(ptr == list->head && ptr == list->tail)
        list->head = list->tail = NULL;
    else if(ptr == list->tail)               //удаление  хвоста
    {
        list->tail = list->tail->right; 
        list->tail->left = NULL;
    }
    else if(ptr == list->head)               //удаление головы
    {
        list->head = list->head->left;  
        list->head->right = NULL;
    }
    else                                     //удаление из середины
    {
        ptr->left->right = ptr->right;  
        ptr->right->left = ptr->left;
    }
} 

// сортировка имен в лексикографическом порядке  
void SortName(LIST* list)
{
    int     key = 1;    
    char*   tmp;    
    LISTEL* ptr; 

    printf("сортировка\n"); 

    while(key)
    {
        key = 0;    
        for(ptr = list->head; ptr != list->tail; ptr = ptr->left)
            if(strcmp(ptr->name, ptr->left->name) < 0)
            {
                tmp = ptr->name;    
                ptr->name = ptr->left->name;    
                ptr->left->name = tmp;  
                key = 1;
            }
    }
} 

// построение списка слов из строки символов      
void MakeListWord(char* exp, LIST* list)
{
    char*   begword, * word;    
    int     len;    
    int     i;

    while(1)
    {
        while(*exp == ' ')
            exp++; 

        begword = exp;  
        len = 0;

        //определение длины слова
        while(*exp)                           
            if(*exp != ' ')
            {
                len++;  
                exp++;
            }
            else
                break;

        if(len == 0)
            return;

        //выделение слова   
        word = (char*)malloc(len + 1); 
        for(i = 0; i < len; i++)
            word[i] = begword[i];   
        word[i] = '\0'; 

        //запись слова в список 
        AddList(list, word);
    }
}

/////////////////////////////////////////////////// 
int main()
{
    SetConsoleOutputCP(1251);

    LIST    list;

    InitList(&list);    
    AddList(&list, "Петя"); 
    AddList(&list, "Саша"); 
    AddList(&list, "Миша"); 
    AddList(&list, "Катя");
    OutList(&list);     
    SortName(&list);    
    OutList(&list); 
    DeleteName(&list, "Миша");  
    DeleteName(&list, "Петя");  
    OutList(&list); 
    ForEach(list.head, list.head->left, Out);   
    DeleteAll(&list);   
    InitList(&list);    
    MakeListWord("Привет Всем Вам !!!", &list); 
    OutList(&list); 
    DeleteAll(&list);

    return 0;
}


Это сообщение отредактировал(а) Dov - 18.10.2005, 20:16


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Deposit
Дата 19.10.2005, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.10.2005

Репутация: нет
Всего: нет



Всё работает, отлично, Благодарю smile !
Теперь надо добавить 2 элемента списка. (вес, возраст)
Правильно ли будет описать эти переменные как целые? Или проще дописать в символьном типе?
Код

//////////////////////////////////
// описание элемента списка    //
//////////////////////////////////
typedef struct ListElTag {
struct ListElTag *left;//связь влево
struct ListElTag *right; //связь вправо
char *name;//хранимый указатель на данные
int    *age;
int    *weight;

} LISTEL;



PM MAIL   Вверх
Deposit
Дата 19.10.2005, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.10.2005

Репутация: нет
Всего: нет



с целым типом не получается. Сделал элемент в char.
Правильно ли заношу элемент в список?
Код

typedef struct ListElTag {
struct ListElTag *left;  //связь влево
struct ListElTag *right; //связь вправо
char *name;    //хранимый указатель на данные
char *age; // возраст
void AddList(LIST *list,char *name,char *age)
{
int len=strlen(name);
//выделение памяти под новый элемент
LISTEL *listel=(LISTEL *)malloc(sizeof(listel));
if(listel==NULL) return;
listel->name=(char*)malloc(len+1);    //выделение памяти под строку
listel->age=(char*)malloc(strlen(age));
if(listel->name==NULL)
if(listel->age==NULL) return;
strcpy(listel->name,name);    //копировать строку
strcpy(listel->age,age);
listel->left=NULL;
listel->right=NULL;
printf("добавление элемента\n");
//организация связи
if(list->head==NULL) //список пуст
{
list->head=list->tail=listel;
}
else //добавление элемента в конец очереди
{
list->tail->left=listel;
listel->right=list->tail;
list->tail=listel;
}
list->size++;
}

PM MAIL   Вверх
Pogreb
Дата 20.10.2005, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 69
Регистрация: 17.10.2005

Репутация: нет
Всего: нет



Выглядит правильно.
В malloc у тебя ошибки не выдает?
Там вроде бы надо указывать sizeof()...
PM MAIL   Вверх
Deposit
Дата 20.10.2005, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.10.2005

Репутация: нет
Всего: нет



Pogreb Ошибки не выдает, но не выводит age на экран, вроде везде дополнил.
А для чего sizeof() ? ведь есть sizeof для listel ...
PM MAIL   Вверх
Deposit
Дата 20.10.2005, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.10.2005

Репутация: нет
Всего: нет



что не хватает в функции вывода? Поясните, почему не выводит age? smile
Код

void OutList(LIST *list)
{
LISTEL *ptr; printf("вывод писка\n");
 for(ptr=list->head; ptr!=NULL; ptr=ptr->left)
printf("%s\n",ptr->name,ptr->age);
}
///////////////////////////////////////////
void main()
{
LIST list;
InitList(&list);
AddList(&list,"Петя","22");
AddList(&list,"Саша","24");
AddList(&list,"Миша","32");
AddList(&list,"Катя","18");
OutList(&list);
}

Добавлено @ 15:28
И еще, не могу до конца понять значений [b] head, tail, left, right. Обьясните русским языком какая их роль?
PM MAIL   Вверх
Dov
Дата 20.10.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(Deposit @ 20.10.2005, 15:19)
что не хватает в функции вывода? Поясните, почему не выводит age? 
Код

void OutList(LIST *list)
{
...
printf("%s\n",ptr->name,ptr->age); // здесь ошибка
...
}

Нужно так:
Код
printf("%s  %s\n",ptr->name,ptr->age);

Добавлено @ 19:46
Цитата
И еще, не могу до конца понять значений [b] head, tail, left, right. Обьясните русским языком какая их роль?

Почитай про двусвязные списки, например: тутачки

Это сообщение отредактировал(а) Dov - 20.10.2005, 19:38


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Deposit
Дата 20.10.2005, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.10.2005

Репутация: нет
Всего: нет



smile почему истину не видно, когда она перед глазами и на самом видном месте. smile Аж стыдно за такие ошибки.

Ссылка про списки не работает. ?
PM MAIL   Вверх
Dov
Дата 20.10.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



В Яндексе набери "двусвязный список"


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
B3cK
Дата 20.10.2005, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 29.5.2005
Где: Минск

Репутация: 1
Всего: 1



Sizeof() надо при использовании malloc и calloc
Ты указываешь размер подкоторый тебе надо выделить память.
Код
char *word;
word=(char*)malloc(m*sizeof(char));

m - это кол-во символов, а размер каждого char.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.