小程序引发的深层思考

#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下一样

你可能感兴趣的:(思考)