c程序中的typedef结构错误

c程序中的typedef结构错误,c,struct,typedef,C,Struct,Typedef,谢谢你分享你的知识:)! 我刚刚用devc++编写了这个c程序,我有很多关于typdef和struct的错误 例如:对于每行带有“->”运算符的“无效使用未定义类型struct item'”,对于第4行的“转发声明struct item'” 代码如下: #include <stdio.h> #include <stdlib.h> typedef struct item* ptr; typedef struct itme { int data;

谢谢你分享你的知识:)! 我刚刚用devc++编写了这个c程序,我有很多关于typdef和struct的错误 例如:对于每行带有“->”运算符的“无效使用未定义类型
struct item'”,对于第4行的“转发声明
struct item'”
代码如下:

#include <stdio.h>
#include <stdlib.h>

typedef struct item* ptr;
typedef struct itme
{
        int data;
        ptr next;
}node;
void add2list(ptr*,int);
void freeList(ptr*);
int main()
{
    ptr H=NULL;
    ptr p3=H;
    int num;
    while (scanf("%d",&num)!=EOF)
          add2list(&H,num);

    while(p3)
    {
            printf("%d  ",p3->data);
            p3=p3->next;
    }
    printf("end\n");   
    freeList(&H);
    return 0;
}

void add2list(ptr* H, int num)
{
     ptr p1,p2,T;
     T=(ptr)malloc(sizeof(node));
     if(!T)
     {
           printf("cannot allocate memory\n");
           exit(0);
     }
     t->data=num;
     p1=*H;
     while(p1)
     {
           if(p1->data==num)
           {
              free(T);
              goto duplicate;
           }   
           else 
           {
                p2=p1;
                p1=p1->next;
           }
     }
     T->next=p1;
     if(p1==*H)
         *H=T; 
     else
     p2->next=T;
     duplicate:;
}   
void freeList(ptr* H)
{
     ptr p1;
     while(H)
     {
         p1=*H;
         (*H)=p1->next;
         free(p1);
     }

}
#包括
#包括
类型定义结构项*ptr;
类型定义结构itme
{
int数据;
ptr-next;
}节点;
无效添加列表(ptr*,int);
无效自由列表(ptr*);
int main()
{
ptr H=NULL;
ptr-p3=H;
int-num;
while(scanf(“%d”,&num)!=EOF)
add2列表(&H,num);
while(p3)
{
printf(“%d”,p3->data);
p3=p3->next;
}
printf(“end\n”);
自由列表(&H);
返回0;
}
void add2列表(ptr*H,int num)
{
ptrp1,p2,T;
T=(ptr)malloc(sizeof(node));
如果(!T)
{
printf(“无法分配内存\n”);
出口(0);
}
t->data=num;
p1=*H;
而(p1)
{
如果(p1->data==num)
{
自由(T);
转到复制;
}   
其他的
{
p2=p1;
p1=p1->next;
}
}
T->next=p1;
如果(p1==*H)
*H=T;
其他的
p2->next=T;
副本:;
}   
无效自由列表(ptr*H)
{
ptr-p1;
while(H)
{
p1=*H;
(*H)=p1->next;
自由(p1);
}
}

谢谢

主要问题是您将“item”拼写为“itme”。发生在我们最好的人身上。

我没有看你所有的代码,但似乎有输入错误

类型定义结构项目*ptr

类型定义结构itme {

还有这个代码片段

while(p3)
{
        printf("%d  ",p3->data);
        p3=p3->next;
}
没有意义,因为
p3
是由NULL显式初始化的

ptr H=NULL;
ptr p3=H;
至少在循环之前,您应该添加语句

p3 = H;
 while(H)
在函数
add2list
中还有另一个输入错误

您声明了指针
T
,但随后使用指针
T

void add2list(ptr* H, int num)
{
     ptr p1,p2,T;
     T=(ptr)malloc(sizeof(node));
     if(!T)
     {
           printf("cannot allocate memory\n");
           exit(0);
     }
     t->data=num;
函数freeList也是错误的

代替陈述

p3 = H;
 while(H)
应该有

 while( *H )

不要在C中强制转换
malloc
的返回,为什么需要
ptr
node
(不使用
node
),但是
ptr
之前声明?
typedef结构itme{
检查此处的打字错误。另外,在结构定义之后移动
typedef struct item*ptr;
。为什么您同时需要
H
p3
?@dvir naim不听取低水平程序员的意见,在大多数情况下,在C中将强制转换放在malloc之前。@dvir naim您错了。这并不能解决您的问题,因为还有其他问题r拼写错误和错误。请参阅我的答案。