心心程序博客

眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行!

导航

小程序引发的深层思考

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

posted on 2012-04-24 21:40  心心程序博客  阅读(236)  评论(0编辑  收藏  举报