-8

リンクされたリストでアスタリスクを検索しようとしていますが、while ループを使用してヘッド ポインターをアスタリスクと比較しようとするたびに、ポインターを整数と比較できないと言ってプログラムがコンパイルされません。

それは印刷リスト機能にあります: while( pt != '*')

/*
 *Description: Construction of a social network
 */

#include < stdio.h>
#include < strings.h>
#include < stdlib.h>
#define SIZE 30
#define PEOPLE_SIZE 20
#define PRINT_NETWORK 1
struct people   
{
        char name[SIZE];
        int age;
        char gender[SIZE];
        int idnumber;
        struct friendlist *friends;
};

typedef struct friendlist
{
        int friendsname[PEOPLE_SIZE];
        struct friendlist *next;
        struct people *person;
}node_t;

void scan_friends(FILE *input2, node_t *pt)
{
        char *friend_name;
        fscanf(input2,"%s", &pt->friendsname);
}

void  print_friends(node_t pt)
{
       printf("%s ", pt.friendsname);
}

void print_list(node_t *pt)
{
        int friendsname[PEOPLE_SIZE];
        struct friendlist *next;
        struct people *person;

}node_t;

void  print_friends(node_t pt) 
{
        printf("%s ", pt.friendsname);
}

void print_list (node_t *pt)
{ 
        if (pt==NULL)
                printf("The list is empty\n");
        else
        {                 // traversing the list
                while (pt!=NULL)
                {
                        while (pt != '*')
                       {
                                    print_friends(*pt);
                                    pt=pt->next;
                       }
                }
        }
}

int main(void)
{
    int choice=0;
    FILE *input; //pointer to people.dat

    FILE *input_friends;
    int i=0;
    struct people people[SIZE];
    struct friendlist friendlist[PEOPLE_SIZE];
    node_t *headp, *temp, *current=NULL;
    char user_name[SIZE];
    int user;

            input_friends=fopen("friends.dat", "r"); //opens friends file

            while(!feof(input_friends))
            {
                    // create a new list element
                    temp = (node_t *)malloc(sizeof(node_t));  // memory
                    scan_friends(input_friends, temp);    // initialization of element 
                    temp->next=NULL;     // setting pointer to null.

                    if (current==NULL)
                    {
                            headp=temp;  // setting the head of the list
                    }
                    else
                    {
                                current->next=temp;   // else connecting to previous
                        }
                        current=temp;   // updating the current element

                        i++;   // count number of elements added
                }
                fclose(input_friends);
                print_list(headp);                                    
        }

        printf("\n");
        return(0);
}
4

1 に答える 1

2

これがあなたが投稿するつもりだったと思うものですが、ポインターをcharと比較できないため、まだコンパイルされません

/*
 *Description: Construction of a social network
 */

#include <stdio.h>
#include <strings.h>
#include <stdlib.h>
#define SIZE 30
#define PEOPLE_SIZE 20
#define PRINT_NETWORK 1

struct people   
{
    char name[SIZE];
    int age;
    char gender[SIZE];
    int idnumber;
    struct friendlist *friends;
};

typedef struct friendlist
{
    int friendsname[PEOPLE_SIZE];
    struct friendlist *next;
    struct people *person;
} node_t;

void scan_friends(FILE *input2, node_t *pt)
{
    char *friend_name;
    fscanf(input2,"%s", &pt->friendsname);
}

void  print_friends(node_t pt)
{
    printf("%s ", pt.friendsname);
}

void print_list (node_t *pt)
{ 
    if (pt==NULL)
        printf("The list is empty\n");
    else
    {                 // traversing the list
        while (pt!=NULL)
        {
            while (pt != '*')
            {
                print_friends(*pt);
                pt=pt->next;
            }
        }
    }
}

int main(void)
{
    int choice=0;
    FILE *input; //pointer to people.dat

    FILE *input_friends;
    int i=0;
    struct people people[SIZE];
    struct friendlist friendlist[PEOPLE_SIZE];
    node_t *headp, *temp, *current=NULL;
    char user_name[SIZE];
    int user;

    input_friends=fopen("friends.dat", "r"); //opens friends file

    while(!feof(input_friends))
    {
        // create a new list element
        temp = (node_t *)malloc(sizeof(node_t));  // memory
        scan_friends(input_friends, temp);    // initialization of element 
        temp->next=NULL;     // setting pointer to null.

        if (current==NULL)
        {
            headp=temp;  // setting the head of the list
        }
        else
        {
            current->next=temp;   // else connecting to previous
        }
        current=temp;   // updating the current element

        i++;   // count number of elements added
    }
    fclose(input_friends);
    print_list(headp);                                    

    printf("\n");
    return(0);
}

私の編集により、自分で整理する必要があるコンパイル エラーが 1 つだけになりました。その47行目:

while (pt != '*')

これは確かにあなたがやりたいことではありません。

アスタリスクと何を比較しますか? 名前?

次のようなものを検討してください

while (pt->person->name != '*')

char 配列を単一の char と比較するため、これはまだ機能しないことに注意してください。しかし、これは、アスタリスクを何と比較したいかによって、あなたが行きたい方向にあなたを動かすはずです. これは、ポインタを持つ構造体のメンバーにアクセスする方法であることに注意してください。

それ以外は、構造体の基本とそのメンバーへのアクセス方法です。

于 2012-04-28T20:40:57.323 に答える