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()则读取标准输入流中第一个非空白字符。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值