| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 548 人关注过本帖
标题:本地录入数据的时候出错,砥砺,弄好久了
只看楼主 加入收藏
jianyuling00
Rank: 3Rank: 3
来 自:琼州学院
等 级:论坛游侠
帖 子:89
专家分:177
注 册:2012-3-17
结帖率:60%
收藏
已结贴  问题点数:80 回复次数:2 
本地录入数据的时候出错,砥砺,弄好久了
程序代码:
#include <stdio.h>
#include <stdlib.h>

unsigned char xorTarget;//全局变量声明
unsigned char addTarget;
unsigned int orgValue;
unsigned char *p = NULL;
int n = 0;
int i = 0;

struct header//页眉结构体(本地保存时写入)
{
    char sav[30];
    char SAV[30];
}boy=
{
    "xorTarget\taddTarget\torgValue\n",
    "你输入的数据如下:\n"
};

unsigned char GetXorValue ( unsigned char* pData, int nSize)//xor校验
{
   unsigned char xorTarget = 0;
   for ( i = 0; i < nSize; i++ ) xorTarget ^= pData[ i];
   return xorTarget;
}
unsigned char GetAddValue ( unsigned char* pData, int nSize)//add校验
{
   unsigned int addTarget = 0;
   for ( i = 0; i < nSize; i++ )
      addTarget = ( addTarget + pData [ i] ) &0xff;
   return ( unsigned char) addTarget;
}
unsigned int GetCRCValue( unsigned char* pData, int nSize)//crc校验
{
    int j;
     unsigned int orgValue = 0xffff , crcConst = 0xa001;
     for (  i = 0; i< nSize; i++ )
     {
         orgValue ^= ( unsigned int) pData[ i+ 1];
         for ( j = 0; j<= 7; j++ )
         {
             if ( 1 == ( orgValue& 1) )
             {
                orgValue >>= 1;
                orgValue ^= crcConst;
             }
             else
                  orgValue >>= 1;
         }
     }
     return orgValue;
}

void save()//数据保存

{
    FILE *fp;
    char file[50];
    int flag = 0;//排版标志变量
    int N;
    printf("\n请输入你要保存的数据个数:\n\n");
    scanf("%d",&N);

    printf("\n请输入要保存的地址:\n");
    getchar();
    gets(file);
    if((fp=fopen(file,"w"))==NULL)
    {
        printf("\n保存失败\n");
        getch();
        exit(0);
    }
    fprintf(fp,"%s\n",boy.SAV);//写入页眉"你输入的数据如下:\n"
    for(i=0;i<N;i++)
    {
        fprintf(fp,"%X\t",*(p+i));//写入用户输入的数据
        flag++;
        if(flag==4)
        {
            fprintf(fp,"\n\n");//数据排版
            flag = 0;
        }

    }

    fprintf(fp,"\n\n");//空行,用于排版
    fprintf(fp,"校验结果如下:\n\n");
    fprintf(fp,"%s\n",boy.sav);//写入页眉"xorTarget\taddTarget\torgValue\n"
    fprintf(fp,"0x%X\t\t0x%X\t\t%u",xorTarget,addTarget,orgValue);//写入校验结果

    fclose(fp);
    printf("\n数据已保存%s中\n",file);
}

void input() //数据读取函数!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

{
    FILE *fp;
    char file[30];
    printf("\n请输入你要录入的文件地址:\n");
    getchar();
    gets(file);
    if((fp=(file,"r"))==NULL)
    {
        printf("\ncannot open\n");
        exit(0);
    }

    p=(unsigned char*)malloc(sizeof(unsigned char));
    fscanf(fp,"%x",p);

    while(!feof(fp))
    {
        i++;
        p=(unsigned char* )malloc(sizeof(unsigned char));
        fscanf(fp,"%x",p+i);

    }

}
void main(void)

{
    start:
    printf("\t\t\t简单数据校验\n\n");//主菜单
    printf("1.从键盘录入数据\n");
    printf("2.从本地录入数据\n");
    printf("3.异或校验\n");
    printf("4.累加和校验\n");
    printf("5.循环冗余校验\n");
    printf("6.数据保存\n");
    printf("7.退出校验\n");
    printf("\n请输入你的选择(1~7):");
    scanf("%d",&i);
    if(i<1||i>7)
    {
        printf("\n输入错误\n");
        goto start;
    }
    switch(i)
    {
        case 1://数据录入
        {
            system("CLS");
            int i;
            printf("\n请输入你要录入的数据个数:\n");
            scanf("%d",&n);
            printf("\n你要输入%d个数据:\n",n);
            p=(unsigned char *)malloc(n*sizeof(unsigned char));
            if(p==NULL)
            {
                printf("\n --is null-- \n");
                exit(1);
            }
            for(i=0;i<n;i++)
            scanf("%x",p+i);

            printf("\n你输入的数据如下:\n\n");
            for(i=0;i<n;i++)
            printf("%x\t",*(p+i));
            printf("\n\n");
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 2:
        {
            input();
            printf("\n你录入的数据如下:\n\n");
            for(i=0;i<n;i++)
            printf("%x\t",*(p+i));
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 3://xor校验
        {
            system("CLS");
            xorTarget = GetXorValue(p,n);//函数调用
            printf("异或校验结果:0x%X\n",xorTarget);
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 4://累加和校验
        {
            system("CLS");
            addTarget = GetAddValue(p,n);
            printf("累加和校验结果:0x%X\n",addTarget);
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 5://CRC校验
        {
            system("CLS");
            orgValue = GetCRCValue(p,n);
            printf("循环冗余校验结果:%u\n",orgValue);
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 6://保存
        {
            system("CLS");
            save();
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 7://退出
        {
            system("CLS");
            free(p);
            printf("\n谢谢使用!\n");
            exit(0);
        }
    }

}


[ 本帖最后由 jianyuling00 于 2012-6-14 22:32 编辑 ]
搜索更多相关主题的帖子: 录入 
2012-06-14 22:27
jianyuling00
Rank: 3Rank: 3
来 自:琼州学院
等 级:论坛游侠
帖 子:89
专家分:177
注 册:2012-3-17
收藏
得分:0 
要读取的文档如下:

1    2    3     4   5

当然可以更智能就更好了

比如要录入的数据文档是:

你输入的数据如下:

1    2    3    4   

5    6    7   

校验结果如下:

xorTarget    addTarget    orgValue

0x0        0x1c        52779

要求只读输入数据,又该怎么改?
2012-06-14 22:30
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:80 
void input() //数据读取函数!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

{
    FILE *fp;
    char file[30];
    printf("\n请输入你要录入的文件地址:\n");
    getchar();
    gets(file);
    if((fp=fopen(file,"r"))==NULL) //这里少个fopen
    {
        printf("\ncannot open\n");
        exit(0);
    }

    p=(unsigned char*)malloc(sizeof(unsigned char));
    fscanf(fp,"%x",p); //读入数据类型不匹配,声明的是unsigned char.

    while(!feof(fp))
    {
        i++;
        p=(unsigned char* )malloc(sizeof(unsigned char));
        fscanf(fp,"%x",p+i); //内存空间指向错误,p为不连续内存空间

    }

}

我们都在路上。。。。。
2012-06-15 11:34
快速回复:本地录入数据的时候出错,砥砺,弄好久了
数据加载中...
 
   



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

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