2012-04-28 12 views
-7

アスタリスクのリンクされたリストを検索しようとしていますが、whileループを使用してアスタリスクとヘッドポインタを比較しようとするたびに、プログラムはそれをコンパイルしませんここでwhile(pt != '*')Cの整数へのポインタを比較

/* 
*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); 
} 
+0

「アスタリスクのリンクリストを検索する」とはどういう意味ですか? – asaelr

+0

これは、アスタリスクとポインタを比較する意味がないためです。 'pt'は' node_t'(struct)へのポインタですが、アスタリスクは文字です。オレンジへのApple –

+0

@ChrisDodd(とasaelr、私の削除されたポスト)は正しいです。 –

答えて

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 != '*') 

これは確かにあなたがしたいものではありません。

アスタリスクとは何を比較したいですか?名前?

あなたは、単一の文字をchar型の配列を比較することがありますので、これはまだ動作しないこと

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

ノートのようなものを考えてみましょう。しかし、アスタリスクと比較したいものに応じて、これはあなたが行きたい方向にあなたを移動させるはずです。これは、ポインタを持つ構造体のメンバーにアクセスする方法です。

他のものは、構造体の基本とメンバへのアクセス方法です。

関連する問題