提领指向不完全类型的指针

问题描述

提领指向不完全类型的指针

#include
#include
#include
#include

#define ID_MAX 10
#define NAME_MAX 20
#define MOBILE_MAX 15
#define ADDRESS_MAX 100
#define COMP_TEL_MAX 15
#define MAX 100
#define FAILURE 0
#define SUCCESS 1

struct perison
{
char id[ID_MAX];
char name[NAME_MAX];
char mobileNum[MOBILE_MAX];
char address[ADDRESS_MAX];
char companyTel[COMP_TEL_MAX];
struct perison *prior;
struct perison *next;
};

enum option{INSERT,DELETE,DISPLAY,SEARCH,exit 1};

typedef struct perison Linklist;
typedef struct Linklist *Link;

void operation_Menu()
{
printf(" |---------------------------|
");
printf(" |--------电子通讯录---------|
");
printf(" |---------------------------|
");
printf(" |(A)添加好友信息 |
");
printf(" |---------------------------|
");
printf(" |(B)列表好友信息 |
");
printf(" |---------------------------|
");
printf(" |(C)搜索好友 |
");
printf(" |---------------------------|
");
printf(" |(D)删除好友 |
");
printf(" |---------------------------|
");
printf(" |(E)退出通讯录 |
");
printf(" |---------------------------|
");
}

int create_linklist(Link *head,char id[])
{
*head = (Link)malloc(sizeof(Linklist));

if(head == NULL)
{
    printf("MALLOC ERROR!");
exit 1;
}

else
{
    strcpy((*head)->id,id);
strcpy((*head)->name,"");
strcpy((*head)->mobileNum,"");
strcpy((*head)->address,"");
strcpy((*head)->companyTel,"");
}

(*head)->prior = *head;
(*head)->next = *head;

}

int get_option(char *opt)
{
if(strcmp(opt,"INSERT") == 0)
{
return INSERT;
}

if(strcmp(opt,"DISPLY") == 0);
{
    return DISPLAY;
}

if(strcmp(opt,"SEARCH") == 0);
{
    return SEARCH;
}

if(strcmp(opt,"DELETE") == 0);
{
    return DELETE;
}

if(strcmp(opt,"EXIT") == 0)
{
    return exit 1;
}

}

int insert_linklist(Link *head, Link *newnode)
{
if(*head == NULL || *newnode == NULL)
{
printf("创建人员节点内存失败!
");
return 0;
}

Link temp = *head;

while(strcmp(temp->next->id,"") != 0)
{
    temp = temp->next;
}

(*newnode)->next = *head;
(*head)->prior = *newnode;
temp->next = *newnode;
(*newnode)->prior = temp;

return 1;

}

void search_linklist(Link *head)
{
char namei[NAME_MAX];

Link temp = *head;

printf("请输入你要查询的姓名:
");
scanf("%s",namei);

while(strcmp(temp->name,namei) != 0)
{
    temp = temp->next;

if(strcmp(temp->name,namei) == 0)
{
    display_node(&temp);
}
else
{
    printf("没查找到此好友!");
    break;
}
}
break;

}

void delete_node(Link *head, char *namei)
{
Link temp = *head;

while(strcpy(temp->next->name,namei) != 0)
{
    temp = temp->next;
}
Link ptr = temp->next;
temp->next = ptr->next;
ptr->next->prior = temp;
free(ptr);
ptr = NULL;

}

void display_linklist(Link *head)
{
Link temp = *head;
temp = temp->next;

printf("_________________________________________________________________________
");
printf("|  ID  |     NAME     |  MOBILENUM  |      ADDRESS       |  COMPANYTEL  |
");
printf("|-----------------------------------------------------------------------|
");

while(strcmp(temp->id,"") != 0)
{
    printf("%-6d|%-14d|%-13d|%-20d|%-14d
",temp->id,temp->name,temp->mobileNum,temp->address,temp->companyTel);
printf("_________________________________________________________________________
");
    temp = temp->next;
    printf("
");
}
printf("
");

}

void display_node(Link *node)
{
printf("_________________________________________________________________________
");
printf("| ID | NAME | MOBILENUM | ADDRESS | COMPANYTEL |
");
printf("|-----------------------------------------------------------------------|
");
printf("%-6d|%-14d|%-13d|%-20d|%-14d
",(*node)->id,(*node)->name,(*node)->mobileNum,(*node)->address,(*node)->companyTel);
}

int my_digit(char *str)
{
int flag = 1;

while(*str != '')
{
    str++;
if(*str >= '0' || *str <= '9')
{
    flag = 1;
}
else
{
    flag = 0;
}

if(flag == 1)
{
    return SUCCESS;
}
else
{
    return FAILURE;
}
}

}

int main()
{
int i;
int opt;
int result;
char option[MAX];
char idi[ID_MAX];
char namei[NAME_MAX];
char mobileNumi[MOBILE_MAX];
char addressi[ADDRESS_MAX];
char companyTeli[COMP_TEL_MAX];

Link head;
Link newnode;

operation_Menu();

create_linklist(&head);

#if 1
while(1)
{
    printf("请输入操作指令:
");
scanf("%s",option);

    opt = get_option(option);

switch(opt)
{
    case INSERT:
    {
        while(1)
    {
        int resault;

        newnode = (Link)malloc(sizeof(Linklist));

        printf("
ID:");
        fflush(stdin);
        scanf("%s",idi);
        if(my_digit(idi) == FAILURE)
        {
            printf("请输入数字类型字符");
        }
        strcpy(newnode->id,idi);

        printf("
NAME:");
        fflush(stdin);
        scnaf("%s",namei);
        strcpy(newnode->name,namei);

        printf("
MOBILENNUM:");
        fflush(stdin);
        scnaf("%s",mobileNumi);
        strcpy(newnode->mobileNum,mobileNumi);

        printf("
ADDRESS:");
        fflush(stdin);
        scnaf("%s",addressi);
        strcpy(newnode->address,addressi);

        printf("
COMPANYTEL:");
        fflush(stdin);
        scnaf("%s",companyTeli);
        strcpy(newnode->companyTel,companyTeli);

        result = insert_linklist(&head, &newnode);

        if(result == 0)
        {
            printf("添加好友失败!");
        exit 0;
        }
        else
        {
            printf("添加好友成功!");
        }

        fflush(stdin);
        break;

    }break;
    }

        case DISPLAY:
    {
        display_linklist(&head);
    break;
    }

    case DELETE:
    {
        delete_node(&head, namei);
    }

    case SEARCH:
    {
        search_linklist(&head);
    break;
    }

    default:
    {
       printf("请输入正确的指令:
");
       break;
    }
}
}
#endif

return 0;

}

解决方案

解决方案二:

今天编译C程序,出现错误:提领指向不完全类型的指针(Error: dereferencing pointer to incomplete type pointer)的错误。
之前没有遇到过,问了问Google,回答如下:
包含声明结构体定义的头文件。
这个错误多出现在访问结构或者联合体的成员。
由于结构体定义在了C文件里,为了解决这个错误,只好把函数写到C文件里。

错误的原因声明......
答案就在这里:错误:提领指向不完全类型的指针

解决方案三:

看到一长串代码并不开心~我觉得你自己先把错误定个位,把出错函数放上来大家一起商量,效率多高呢!
再说include了哪些头文件也并不能看到~。。。
你先把代码好好复制起~我就想看看除了stdio和stdlib你还用了什么库函数~

解决方案四:

错误真是挺多。

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

#define ID_MAX 10
#define NAME_MAX 20
#define MOBILE_MAX 15
#define ADDRESS_MAX 100
#define COMP_TEL_MAX 15
#define MAX 100
#define FAILURE 0
#define SUCCESS 1

struct perison
{
    char id[ID_MAX];
    char name[NAME_MAX];
    char mobileNum[MOBILE_MAX];
    char address[ADDRESS_MAX];
    char companyTel[COMP_TEL_MAX];
    struct perison *prior;
    struct perison *next;
};
enum option{INSERT,DELETE,DISPLAY,SEARCH,exit1};
typedef struct perison Linklist;
typedef struct perison* Link;
void display_node(Link *node); //加一个声明

void operation_Menu()
{
    printf("		|---------------------------|
");
    printf("		|--------电子通讯录---------|
");
    printf("		|---------------------------|
");
    printf("		|(A)添加好友信息 |
");
    printf("		|---------------------------|
");
    printf("		|(B)列表好友信息 |
");
    printf("		|---------------------------|
");
    printf("		|(C)搜索好友 |
");
    printf("		|---------------------------|
");
    printf("		|(D)删除好友 |
");
    printf("		|---------------------------|
");
    printf("		|(E)退出通讯录 |
");
    printf("		|---------------------------|
");
}
int create_linklist(Link *head,char id[])
{
    *head = (Link)malloc(sizeof(Linklist));
    if(head == NULL)
    {
        printf("MALLOC ERROR!");
        exit(1); //加一个括号
    }
    else
    {
        strcpy((*head)->id,id);
        strcpy((*head)->name,"");
        strcpy((*head)->mobileNum,"");
        strcpy((*head)->address,"");
        strcpy((*head)->companyTel,"");
    }

    (*head)->prior = *head;
    (*head)->next = *head;
    return 0;
}
int get_option(char *opt)
{
    if(strcmp(opt,"INSERT") == 0)
    {
        return INSERT;
    }
    if(strcmp(opt,"DISPLAY") == 0) //去掉一个分号
    {
        return DISPLAY;
    }

    if(strcmp(opt,"SEARCH") == 0) //去掉一个分号
    {
        return SEARCH;
    }

    if(strcmp(opt,"DELETE") == 0) //去掉一个分号
    {
        return DELETE;
    }

    if(strcmp(opt,"EXIT") == 0)
    {
        return exit1; //修改
    }
    return -1;
}
int insert_linklist(Link *head, Link *newnode)
{
    if(*head == NULL || *newnode == NULL)
    {
        printf("创建人员节点内存失败!
");
        return 0;
    }
    Link temp = *head;

    while(strcmp(temp->next->id,"") != 0)
    {
        temp = temp->next;
    }

    (*newnode)->next = *head;
    (*head)->prior = *newnode;
    temp->next = *newnode;
    (*newnode)->prior = temp;

    return 1;
}
void search_linklist(Link *head)
{
    char namei[NAME_MAX];
    Link temp = *head;

    printf("请输入你要查询的姓名:
");
    scanf("%s",namei);

    temp = temp->next;
    while(strcmp(temp->id,"") != 0)
    {
        if(strcmp(temp->name,namei) == 0)
        {
            display_node(&temp);
            return;
        }
        temp = temp->next;
    }
    printf("没查找到此好友!");
}
void delete_node(Link *head, char *namei)
{
    Link temp = *head;
    while(strcmp(temp->next->name,namei) != 0)
    {
        temp = temp->next;
    }
    Link ptr = temp->next;
    temp->next = ptr->next;
    ptr->next->prior = temp;
    free(ptr);
    ptr = NULL;
}
void display_linklist(Link *head)
{
    Link temp = *head;
    temp = temp->next;
    printf("_________________________________________________________________________
");
    printf("|  ID  |     NAME     |  MOBILENUM  |      ADDRESS       |  COMPANYTEL  |
");
    printf("|-----------------------------------------------------------------------|
");

    while(strcmp(temp->id,"") != 0)
    {
        printf("%-6s|%-14s|%-13s|%-20s|%-14s
",temp->id,temp->name,temp->mobileNum,temp->address,temp->companyTel);
        printf("_________________________________________________________________________
");
        temp = temp->next;
        printf("
");
    }
    printf("
");
}
void display_node(Link *node)
{
    printf("_________________________________________________________________________
");
    printf("| ID | NAME | MOBILENUM | ADDRESS | COMPANYTEL |
");
    printf("|-----------------------------------------------------------------------|
");
    printf("%-6s|%-14s|%-13s|%-20s|%-14s
",(*node)->id,(*node)->name,(*node)->mobileNum,(*node)->address,(*node)->companyTel);
}
int my_digit(char *str)
{
    int flag = 1;
    while(*str != '')
    {
        if(*str >= '0' || *str <= '9')
        {
            flag = 1;
        }
        else
        {
            flag = 0;
        }
        str++;

        if(flag == 1)
        {
            return SUCCESS;
        }
        else
        {
            return FAILURE;
        }
    }
    return SUCCESS;
}
int main()
{
    int opt;
    int result;
    char option[MAX];
    char idi[ID_MAX]="";
    char namei[NAME_MAX];
    char mobileNumi[MOBILE_MAX];
    char addressi[ADDRESS_MAX];
    char companyTeli[COMP_TEL_MAX];
    Link head;
    Link newnode;

    operation_Menu();

    create_linklist(&head, idi); //这里修改

    while(1)
    {
        printf("请输入操作指令:
");
        scanf("%s",option);

        opt = get_option(option);

        switch(opt)
        {
        case INSERT:
            {
                while(1)
                {
                    newnode = (Link)malloc(sizeof(Linklist));

                    printf("
ID:");
                    fflush(stdin);
                    scanf("%s",idi);
                    if(my_digit(idi) == FAILURE)
                    {
                        printf("请输入数字类型字符");
                    }
                    strcpy(newnode->id,idi);

                    printf("
NAME:");
                    fflush(stdin);
                    scanf("%s",namei);
                    strcpy(newnode->name,namei);

                    printf("
MOBILENNUM:");
                    fflush(stdin);
                    scanf("%s",mobileNumi);
                    strcpy(newnode->mobileNum,mobileNumi);

                    printf("
ADDRESS:");
                    fflush(stdin);
                    scanf("%s",addressi);
                    strcpy(newnode->address,addressi);

                    printf("
COMPANYTEL:");
                    fflush(stdin);
                    scanf("%s",companyTeli); //拼写错误,scanf
                    strcpy(newnode->companyTel,companyTeli);

                    result = insert_linklist(&head, &newnode);

                    if(result == 0)
                    {
                        printf("添加好友失败!");
                        exit(0); //加一个括号
                    }
                    else
                    {
                        printf("添加好友成功!");
                    }

                    fflush(stdin);
                    break;

                }break;
            }

        case DISPLAY:
            {
                display_linklist(&head);
                break;
            }

        case DELETE:
            {
                printf("请输入要删除人的姓名:");
                scanf("%s",namei);

                delete_node(&head, namei);
                break;
            }

        case SEARCH:
            {
                search_linklist(&head);
                break;
            }
        case exit1:
            return 0;

        default:
            {
                printf("请输入正确的指令:
");
                break;
            }
        }
    }

    return 0;
}

时间: 2024-11-11 03:10:18

提领指向不完全类型的指针的相关文章

c语言-结构体指针数组指向结构体类型数组的问题

问题描述 结构体指针数组指向结构体类型数组的问题 #include<stdio.h> #include<stdlib.h> struct student { char num; char name[10]; int grade; }; void swap(struct student *p[],int n) { int k,m,i,j; struct student *d; k=0;m=n-1; while(k<m) { j=m-1;m=0; for(i=k;i<=j;

warning C4150: 删除指向不完整“XXX”类型的指针;没有调用析构函数

  情况源于我的之前一片博客<C++ 智能指针>,在我写demo代码的时候.   向前申明了class Phone, 然后再U_ptr类析构函数中delete Phone的指针. 出现warning C4150: 删除指向不完整"XXX"类型的指针:没有调用析构函数     这个waring会导致内存泄露.前向申明的类的析构函数没有被调用     出现warning的代码如下:   #include <iostream> using namespace std;

c语言-C语言函数的形参(结构体类型)和实参类型(指针)可以不同吗?

问题描述 C语言函数的形参(结构体类型)和实参类型(指针)可以不同吗? int numstus; int lens; student pointer; void main() { int i=1; char str[2]; lens=100; pointer=(student *)malloc(lens*LEN); /分配内存*/ numstus=0; welcome(); /*欢迎界面*/ while(i>0) { i=menu_select(); /*控制菜单*/ switch(i) { c

简单总结C语言中各种类型的指针的概念_C 语言

C语言中有很多关于指针的使用,指针也是C语言的灵魂所在,而且C语言中也有很多有关指针的概念,这里学习并总结了一些知道的概念.  常量指针:首先它是一个指针,常量只是用来修饰指针的定语.其定义如下: char const * cp; char a='a'; 如何识别呢?根据右结合优先,先是*优先,所以这个cp变量是一个指针,然后是const修饰*,所以这是一个常量指针.即指向常量的指针. cp=&a; //正常语法 *cp=a; //错误语法,因为其指向的值是一个常量  指针常量:首先它是一个常量

详解Unified Parallel C中的指针类型,指针算法

UPC 语言中的指针类型 UPC 语言把数据分为共享类型和私有类型.一个指针所指向的数据可能为共享类型或者私有类型,并且指针本身也可以是共享类型或者私有类型.因此 UPC 语言中的指针共有以下四种类型,参见图 1 指向私有数据私有类型指针 指向http://www.aliyun.com/zixun/aggregation/6267.html">共享数据私有类型指针 指向私有数据共享类型指针 指向共享数据共享类型指针 图 1. UPC 语言指针类型 指向私有数据私有类型指针 如图 1 中的

Delphi 的类型与指针

  谈谈 Delphi 的类型与指针[1] 先声明: 不要把我说的这些个东西当作教科书, 这都是自己的浅见; 同时希望得到指正. Delphi 的指针分为 "类型指针" 和 "无类型指针" 两类.Delphi 中的类型, 常用的也得有几百个, 我们可以给每种类型定义相应的类型指针.其实 Delphi 已经为很多类型预定义了指针, 譬如数据类型: Integer 有对应的 PInteger;Char 有对应的 PChar;string 有对应的 PString;再譬如

指向多维数组的指针变量

问题描述 指向多维数组的指针变量 #include int main() { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int *p; for(p=a[0];p<a[0]+12;p++) { if((p-a[0])%4==0) printf(" "); printf("%4d",*p); } } 把for(p=a[0];p<a[0]+12;p++)改成for(p=a[0];p<a+3;p++)为什么是正确的

结构体 赋值 初始化-结构体类型的指针初始化和赋值问题

问题描述 结构体类型的指针初始化和赋值问题 编程的时候我定义了一个结构体,结构体有几个变量的值我必须要赋初值,因为循环得用.结构体这样定义:typedef struct{ BYTE stream_Type; unsigned short PID; unsigned short InfoDescrip;}M_PICE;用的时候:M_PICE* p_Mpice = NULL;p_Mpice->InfoDescrip = 0;运行到上一句就报错Unhandled exception in DVB.ex

将指向结构体对象的指针作为函数参数,调用p-&amp;amp;gt;时调试报错

问题描述 将指向结构体对象的指针作为函数参数,调用p->时调试报错 void deleteelement(linearlist *list, int power) { linearlist *p = list; while (p->power != power && p->next != NULL) //调试时显示错误在这一行 { p = p->next; } if (p->power == power) { linearlist *dele = p; p =