C语言链表通讯录问题总结

1.定义链表时
typedef struct Node
 {  DataType data;
    struct Node *next;
  }Node;
 typedef Node *llist;

容易出现从不兼容的指针类型赋值 从不兼容的指针类型初始化

原因:第一行的Node必须有,而且必须和Node*next中的一致,所以建议改为

 typedef struct node
 31 {  DataType data;
 32    struct node *next;
 33 }Node;
 34 
 35 typedef Node *llist;
 

2.文件编程时

if((fp=fopen(fname,"r"))==NULL )  正确

if(fp=fopen(fname,"r")==NULL)   错误

出现警告: 赋值时将整数赋给指针,未作类型转换 [默认启用]


3.错误: expected declaration or statement at end of input

这是因为大括号的少一个,括号的个数不成对,仔细在出错的函数中查找,即可。


4.在调用主菜单时,scanf读取sel反复执行,所以

%c前要输入一个空格, scanf(" %c",&c);

这个空格非常重要,而且容易忽视,当我按3全部删除时,第一次成功第二次按3提示错误输入,找了很久终于找到原因:



%c前面的空格就是用来屏蔽空白符的
1、缓冲区
缓冲区是一块存放临时输入数据的内存,我们在键盘上输入数据之所以不会马上显示,就是因为数据存放在了缓冲区,在上面例子中,当我们按下回车键后,缓冲区的数据会传送到标准输入流。

2、标准输入流
标准输入流(stdin)是文件指针,scanf()就是从标准输入流获取数据。 

以上面代码为例,当执行到scanf()时,开始等待用户输入,当我们输入数据,在按下回车键前会把数据储存在缓冲区,按下回车键后,会把数据以及换行符(\n)一起传送到标准输入流(stdin)中,scanf()就是从标准输入流中或许数据,上面第一个scanf()要读入一个整数,它从标准输入流中查找,跳过空白符(空格、换行符、制表符),如果遇到数字,则开始读入,直到遇到非数字的字符结束,最后计算读取到的数值,储存到相关变量中。

 所以对于scanf()而言,%c是个较为特殊的说明符。 %c前没空格,scanf()将读取标准输入流中的第一个字符,%c前有空格,scanf()则读取标准输入流中第一个非空白字符。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言链表是一种数据结构,常用于实现通讯录管理系统,因为它可以动态地存储和管理联系人信息。以下是一个简单的C语言链表通讯录管理系统的概述: 1. **节点定义**:链表由一个个节点组成,每个节点包含联系人的姓名、电话号码或电子邮件等基本信息,以及一个指向下一个节点的指针。 ```c typedef struct Contact { char name[50]; char phone[20]; char email[50]; struct Contact* next; } Contact; ``` 2. **链表初始化**:创建一个链表头部指针,并初始化第一个节点。 ```c Contact* head = NULL; void addContact(Contact* &head, char* name, char* phone, char* email) { Contact* newNode = (Contact*)malloc(sizeof(Contact)); newNode->name = name; newNode->phone = phone; newNode->email = email; newNode->next = head; head = newNode; } ``` 3. **添加联系人**:函数用来向链表中添加新的联系人。 4. **查找联系人**:通过遍历链表,根据姓名或电话号码搜索特定的联系人。 ```c Contact* searchByName(Contact* head, char* name) { Contact* current = head; while (current != NULL) { if (strcmp(current->name, name) == 0) { return current; } current = current->next; } return NULL; } ``` 5. **删除联系人**:根据需要提供删除节点的函数,可能需要更新相邻节点的指针。 6. **遍历显示**:打印整个通讯录或显示某个联系人信息。 7. **内存管理**:记得释放不再使用的节点内存,防止内存泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值