| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 578 人关注过本帖
标题:大家帮我运行下这个,看看结果
只看楼主 加入收藏
zd123
Rank: 2
等 级:论坛游民
帖 子:43
专家分:33
注 册:2009-9-4
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:9 
大家帮我运行下这个,看看结果
先在D盘下创建一个 记事本   qq.txt   输入几个数字,随便几个都行,  最后一个的时候打一个空格  ,保存好,
运行程序,看看输出结果中是不是最后一个  数字重复了!


#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#define SIZE sizeof(snode)
typedef struct student
{
    int num;
    struct student *next;
    struct student *prior;
}snode;
snode *create1();
void print(snode *head);                 
void main(void)
{

    snode *head1;
        printf("\n链表为:\n");
    head1=create1();
        printf("\n链表为:\n");
   

    print(head1);
   

}
snode *create1()
{
    snode *head,*r,*s;
    FILE *fp;
    int num1;
    head=(snode *)malloc(sizeof(SIZE));
    head->next=head->prior=NULL;
    r=head;
    fp=fopen("D:\\qq.txt","r");
    while(!feof(fp))
    {
        fscanf(fp,"%d",&num1);                        
        s=(snode *)malloc(sizeof(SIZE));
        s->num=num1;s->next=NULL;s->prior=r;
        r->next=s;
        r=s;
    }
    return head;
}

void print(snode *head)
{
    snode *p;
    p=head->next;  
     while(p!=NULL)                          
    {                              
        printf("%6d",p->num);         
        p=p->next;
    }
}
搜索更多相关主题的帖子: 运行 结果 
2009-09-11 22:52
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
while(!feof(fp))         这个东西不好,用这个很容易出现文件最后的重复问题            

如果是先判断再用    feof 的话就没问题了

我也不是很清楚,     高手们有谁知道很了解这个函数的说说下
2009-09-15 15:20
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:7 
#define SIZE sizeof(snode)
·
·
head=(snode *)malloc(sizeof(SIZE));/* 这里内存分配有问题,这样只获得两字节的空间给head,直接用SIZE就好。
                                      如:head=(snode *)malloc(SIZE); */
·
上面说的是另一个问题,不是你说的最后一数重复的问题,你在文本里输入的数不能大于整型范围,数与数之间与空格或回车隔开都可以,但最后一个数后不能留一个空格。用fprintf函数保存整数到文件里结尾绝对不是空格。                  

努力—前进—变老—退休—入土
2009-09-15 16:14
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
回复 3楼 UserYuH
请先运行在说别人到底有没有错,好不!!!!!!!!!!!!
2009-09-15 16:59
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
回复 3楼 UserYuH
人家都说 了最后一个打几个空格,   你不答非所问吗
2009-09-15 17:00
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:7 
    fp=fopen("D:\\qq.txt","rb");
    fscanf(fp,"%d",&num1);
    p->num=num1;
    while(条件)      ....... feof(fp)
    {
        p=(snode *)malloc(sizeof(SIZE));
        fscanf(fp,"%d",&num1);
        p->num=num1;
    }


这样打 N 个空格都不会重复
   
2009-09-15 17:04
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
回复 6楼 雪花神剑
说几点:
#define SIZE sizeof(snode)  
·
·
head=(snode *)malloc(sizeof(SIZE));/*这个扩展,head=(snode *)malloc(sizeof(sizeof(snode))),
sizeof(sizeof(snode))得到是个2值,意义上是不是错了,虽然程序可以运行。定义的结构体大小sizeof(snode)应是6*/
·
对重得这个只要加个判断就不会有最后一个重复。因为读到后面的空格时,文件还没结束,继续循环,到fscanf函数时读取数会失败,因为后面没整数,但这时的num1里的值还保存上次读取的值,会继续赋给新申请的结构体。所以会重复。
while(!feof(fp))
    {
            
    if(fscanf(fp,"%d",&num1)==-1)break; /* 这里加的判断,是如读取失败,则退出循环,这就不会有重复 */
        s=(snode *)malloc(sizeof(SIZE));
        s->num=num1;s->next=NULL;s->prior=r;
        r->next=s;
        r=s;
    }
哪说得不对,请再指点。

努力—前进—变老—退休—入土
2009-09-15 20:27
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
回复 3楼 UserYuH
我没说你错了,只是你这里说的原因好像和最后    加几个空格与  会重复的问题无关吧   

你这里说的是对的,我又没说你错了,只是这个不能解决LZ 的问题
2009-09-16 09:16
雪花神剑
Rank: 2
来 自:吉林
等 级:论坛游民
帖 子:579
专家分:47
注 册:2009-3-12
收藏
得分:0 
回复 7楼 UserYuH
这里才说出了 真正的原因嘛

我以前对这里也不太清楚,现在看了你写的,明白多了,谢谢

[ 本帖最后由 雪花神剑 于 2009-9-16 09:27 编辑 ]
2009-09-16 09:25
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
我人很好,看我头像,就像这小女孩一样,有纯洁的心,有爱心,没皮气。呵呵
论坛嘛,讨论讨论嘛,都是为了学习,学些书上学不到的东西。

努力—前进—变老—退休—入土
2009-09-16 11:45
快速回复:大家帮我运行下这个,看看结果
数据加载中...
 
   



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

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