标题:请大神来帮我看下指针的问题。调释没有问题,运行有错误。感觉逻辑应该没有 ...
只看楼主
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
结帖率:94.44%
已结贴  问题点数:10 回复次数:9 
请大神来帮我看下指针的问题。调释没有问题,运行有错误。感觉逻辑应该没有问题。可是。(绝对不是作业题目。)。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
struct Length
{
    char name[20];
    char phone[20];
    struct Length *next;
    struct Length *previous;
};
int sll_daxiao(struct Length *xiao,struct Length *da);
int sll_charu(struct Length *xian,struct Length *hou);
int main(void)
{
    struct Length *current = NULL;
    struct Length *first = NULL;
    struct Length *last = NULL;
    char test = '\0';
    for(;;)
    {
        printf("请问是否能填写电话簿请选择(Y or N):");
        scanf(" %c",&test);
        if(tolower(test) == 'n')
            break;
        current = (struct Length*)malloc(sizeof(struct Length));
        if(first == NULL)
        {
            first = current;
            current ->previous =NULL;
        }
        else
        {
            last ->next = current;
            current ->previous = last;
        }
        printf("请输出想填写电话人的姓名:");
        scanf("%s",current ->name);
        printf("请输入%s的电话号码:",current ->name);
        scanf("%s",current ->phone);
        current ->next = NULL;
        last = current;
    }
    current = first;
    while(current != NULL)
    {
        if(!(sll_charu(current,current->next)))
        {
            current = current ->next;
            continue;
        }
        else
            current = current ->next;
    }
    current = first;
    while(current != NULL)
    {
        printf("\n%s的电话号码是%s\n",current->name,current->phone);
        last = current;
        current = current ->next;
    }
    current = last;
    while(current !=  NULL)
    {
        printf("\n%s的电话号码是%s\n",current->name,current->phone);
        last = current;
        current = current ->previous;
        free(last);
    }
    return 0;
}
int sll_daxiao(struct Length *da,struct Length *xiao)
{
    if(strcmp(da->name,xiao->name)<0)
        return TRUE;
    else
        return FALSE;
}
int sll_charu(struct Length *xian,struct Length *hou)
{
    struct Length *first;
    struct Length *last;
    if(hou ==NULL || xian == NULL)
        return 0;
    last = hou -> next;
    first = xian ->previous;
    if(sll_daxiao(xian,hou))
    {
        first ->next = hou;
        hou -> next =xian;
        xian ->next = last;
        last ->previous = xian;
        xian -> previous = hou;
        hou ->previous = first;
        return 1;
    }
    return 0;
}


//题目是要求存储手机号码和个人姓名。 按姓名的大小排序。利用链表。
//感觉逻辑应该没有错。。可是。。- -  请大神来帮我指出错误。最好给一些标准代码。。谢谢。。
搜索更多相关主题的帖子: phone color 
2013-03-09 21:34
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:5 
你所编写的程序,逻辑上没有错误,你只要在你的代码顶部加上#include "stdafx.h"就可以了

Maybe
2013-03-09 22:07
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
得分:0 
回复 2楼 邓士林
为什么要添加呢,?请教下小弟。。

一同学习, 一同进步
2013-03-09 22:13
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
回复 3楼 dengluoy
#include "stdafx.h"是预编译处理器把stdafx.h文件中的内容加载到程序中来。stdafx.h  1名称的英文全称为:Standard Application Fram Extend  所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。   预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。   编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。   因此,所有的MFC实现文件第一条语句都是:#include "stdafx.h"。

Maybe
2013-03-09 22:21
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
得分:0 
回复 4楼 邓士林
E:\C语言\12\123.cpp(5) : fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory

- - 。 为什么。直接调试不了。

一同学习, 一同进步
2013-03-09 22:24
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
得分:0 
我这个问题出在哪呢。。- - 。好像这个头文件和我程序没有很大关联呀

一同学习, 一同进步
2013-03-09 22:25
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
回复 6楼 dengluoy
我把你的程序代码拷贝到我的vc上加上那个头文件集可以的,要不你试着新建一个工程,选择默认的选项,然后你的工程里面就有这个头文件(#include <stdafx.h>)啦

Maybe
2013-03-09 22:56
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
得分:0 
大哥,我想知道问题的所在。。。。

一同学习, 一同进步
2013-03-09 23:02
口袋天使
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2013-3-9
得分:5 
是不是因为malloc返回的函数没有做异常检查。如果malloc返回NULL,for(;;){}里的程序就不可控了~
2013-03-09 23:11
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
回复 9楼 口袋天使
你试试,为什么在你电脑上不行呢?在我这运行都很正常,我只能说逻辑上没有错,对的。我这可以运行,你试试你那

Maybe
2013-03-09 23:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-400291-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.094259 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved