小程序引发的深层思考
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
/*
* 功能:演示双向链表
* 作者:虾米
* */
/*定义双向链表的存储结构*/
typedef struct du_node
{
int num;
struct du_node *prior;
struct du_node *next;
}DU_NODE, *du_linklist;
/*1. 创建链表*/
DU_NODE *create(void)
{
char flag = 'Y';
printf("======Create linklist! ======\n");
DU_NODE *head, *p, *tail;
if((head = (DU_NODE *)malloc(sizeof(DU_NODE))) == NULL)
{
printf("不能分配内存空间!\n");
exit(0);
}
head->prior = NULL;
head->next = NULL;/*建立双链表空头结点*/
tail = head;
while(flag == 'Y' || flag == 'y')
{
if((p = (DU_NODE *)malloc(sizeof(DU_NODE))) == NULL)
{
printf("不能分配内存空间!\n");
exit(0);
}
printf("请输入学生的学号,输入 0 退出输入:");
scanf("%d", &p->num);
printf("已输入:%d\n", p->num);
p->next = NULL;
p->prior = tail;
tail->next = p;
tail = p;
//fflush(NULL);
getchar();
printf("------------------------\n");
printf("想继续吗?(Y/N)\n");
scanf("%s", &flag);
}
printf("创建完毕!\n");
return head;
}
/*2. 打印数据*/
DU_NODE *display(DU_NODE *head)
{
DU_NODE *p;
p = head;
if(p == NULL)
{
printf("链表不存在,请先初始化!\n");
}
else
{
p = head->next;
printf("======Display datas!======\n");
printf("数据如下:\n");
while(p)
{
printf("%d\n", p->num);
p = p->next;
}
}
return NULL;
}
int main()
{
DU_NODE *head = create();
display(head);
getchar();
getchar();
return 0;
}
错误的地点在scanf(“%s”)这里在windows下的错误为 堆栈破坏了flag的值,而在linux就没有出现这样的问题 同样是标准的scanf怎么就会出现不一样?
这可能是因为系统的压栈和栈平衡不同的原因引起的,同时fflush刷新的是所有缓冲区还是输出缓冲区有带考察
scanf(“%d”,&temp)会自动丢弃进来的“回车” 非回车不丢弃……windows和linux下一样