标题:为什么最后输出的总是乱码.
只看楼主
budong998
Rank: 2
等 级:论坛游民
帖 子:25
专家分:15
注 册:2010-7-18
结帖率:75%
已结贴  问题点数:10 回复次数:2 
为什么最后输出的总是乱码.
学习中,写一个出来,输出时最后总是乱码.如下图.大家帮忙看看哪里有问问题.

程序代码:
#include<stdio.h>
#include<string.h>
#define PH struct phone_book
FILE *fp;
static struct phone_book
{
    char name[20],mail[30],add[50];
    int num[15],num1[15],num2[15];
    struct phone_book *next;
};
PH *put()
{
    PH *p1,*p2,*p;
    int i=0;
    printf("key \"q\" to exit\n");
    while(getch()!='q')
    {  
        p2=(PH *)malloc(sizeof(PH));
        printf("input name,mail,add,num:\n");
        scanf("%s%s%s",p2->name,p2->mail,p2->add);
        scanf("%s%s%s%%s%s%s",p2->num,p2->num1,p1->num2);
        if(i==0)
        {
            p1=p=p2;p->next=0;
        }
            else
        {
        p1->next=p2;
        p2->next=0;
        p1=p2;
        }
    i++;
    }
    return p;
}
main()
{
    PH *p;
    p=put();
    if((fp=fopen("e:\\phone_book.txt","at+"))==NULL)
    {
        printf("open the files error,press any key exit!\n");
        getch();exit(1);
    }
    while(p!=0)
    {
        fprintf(fp,"姓名\t\t\t 邮箱\t\t\t\t地址\n");
        fprintf(fp,"%s\t%s\t%s\n",p->name,p->mail,p->add);
        fprintf(fp,"电话\t\t电话1\t\t电话2\n");
        fprintf(fp,"%s\t%s\t%s\n\n",p->num,p->num1,p->num2);
        p=p->next;
    }
    fclose(fp);
    getch();
}
搜索更多相关主题的帖子: 学习 
2011-01-04 14:50
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:5 
#include<stdio.h>
#include<string.h>
#define PH (struct phone_book)//保险起见
struct phone_book  //要static干吗?
{
    char name[20],mail[30],add[50];
    int num,num1,num2;  //数还是数组???
    struct phone_book *next;
};
PH *put()
{
    PH *p1,*p2=(PH *)malloc(sizeof(PH)),*p=(PH *)malloc(sizeof(PH)),*r=(PH *)malloc(sizeof(PH));
    int i=0;
    printf("when num is 0 then exit:\n"); //这样判断结束的
    while(r->num!=0)
    {  
        printf("input name,mail,add,num:\n");
        scanf("%s%s%s",p2->name,p2->mail,p2->add);
        scanf("%d%d%d",&p2->num,&p2->num1,&p2->num2);  //小心你自己定义的num等是数,不是字符串
        if(i==0)
         { p=p2; r=p2;  p2=(PH *)malloc(sizeof(PH)); p1->next=p2; p1=p2; }        
        else
       {
        p1->next=p2;
        r=p2; //记忆最后一个节点来判断结束
        p2=(PH *)malloc(sizeof(PH));
        p1=p2;        
        }
    i++;
    }
    r->next=NULL;
    return p;
}
void main()
{
    PH *p=(PH *)malloc(sizeof(PH));
    p=put();
    FILE *fp;
    if((fp=fopen("E:\\phone_book.txt","w"))==NULL)
    {
        printf("open the files error,press any key exit!\n");
        getch();exit(1);
    }
    while(p->next!=NULL)
    {
        fprintf(fp,"姓名\t\t\t 邮箱\t\t\t\t地址\n");
        fprintf(fp,"%s\t%s\t%s\n",p->name,p->mail,p->add);
        fprintf(fp,"电话\t\t电话1\t\t电话2\n");
        fprintf(fp,"%d\t%d\t%d\n\n",p->num,p->num1,p->num2);
        p=p->next;
    }
    fclose(fp);
    getch();
}


[ 本帖最后由 qq1023569223 于 2011-1-4 15:46 编辑 ]

   唯实惟新 至诚致志
2011-01-04 15:32
逐渐学习
Rank: 6Rank: 6
等 级:侠之大者
帖 子:113
专家分:454
注 册:2010-9-26
得分:5 
scanf("%s%s%s%%s%s%s",p2->num,p2->num1,p1->num2);
改成scanf("%s%s%s",p2->num,p2->num1,p2->num2);
楼上问的好,为什么用static呢?

[ 本帖最后由 逐渐学习 于 2011-1-4 15:57 编辑 ]

帮人《---》帮己
2011-01-04 15:55



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




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

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