| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 713 人关注过本帖
标题:数据校验,错误一大堆,求高手改正
只看楼主 加入收藏
jianyuling00
Rank: 3Rank: 3
来 自:琼州学院
等 级:论坛游侠
帖 子:89
专家分:177
注 册:2012-3-17
结帖率:60%
收藏
已结贴  问题点数:100 回复次数:4 
数据校验,错误一大堆,求高手改正
程序代码:
#include <stdio.h>
#include <stdlib.h>

unsigned char xorTarget;
unsigned char addTarget;
unsigned int orgValue;
unsigned char *pData;
int n;
int i;

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;

    printf("请输入要保存的地址:\n");
    getchar();
    gets(file);
    if((fp=fopen(file,"w"))==NULL)
    {
        printf("\n保存失败\n");
        getch();
        exit(0);
    }
    /*fprintf(fp,"%s",boy.SAV);
    for(i=0;i<n;i++)
    {
        fprintf(fp,"%x\t",pData[i]);
        flag++;
        if(flag==4)
        fprintf(fp,"\n");
        flag=0;
    }
    fprintf(fp,"\n");*/
    fprintf(fp,"%s",boy.sav);
    fprintf(fp,"0x%x\t\t0x%x\t\t%u",xorTarget,addTarget,orgValue);

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

void creat(unsigned char *pData)

{
    int n;
    printf("\n请输入你要录入的数据个数:\n");
    scanf("%d",&n);
    printf("\n你要输入%d个数据:\n",n);
    pData=(unsigned char *)malloc(n*sizeof(unsigned char));

}
void input(unsigned char *pData)

{
    int n;
    for(i=0;i<n;i++)
    scanf("%x",&pData[i]);
}

void main(void)

{
    start:
    printf("\t\t\t简单数据校验\n");
    printf("1.录入数据\n");
    printf("2.异或校验\n");
    printf("3.累加和校验\n");
    printf("4.循环冗余校验\n");
    printf("5.数据保存\n");
    printf("6.退出校验\n");
    printf("\n请输入你的选择(1~6):");
    scanf("%d",&i);
    if(i<1||i>6)
    {
        printf("\n输入错误\n");
        goto start;
    }
    switch(i)
    {
        case 1:
        {
            unsigned char *pData;
            creat(pData);
            input(pData);
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 2:
        {
            system("CLS");
            //unsigned char *pData1;
            //creat(pData1);
            //input(pData1);
            xorTarget = GetXorValue(pData,7);
            printf("异或校验结果:0x%x\n",xorTarget);
            //free(pData1);
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 3:
        {
            system("CLS");
            //unsigned char *pData2;
            //creat(pData2);
            //input(pData2);
            addTarget = GetAddValue(pData,7);
            printf("累加和校验结果:0x%x\n",addTarget);
            //free(pData2);
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 4:
        {
            system("CLS");
            //unsigned char *pData3;
            //creat(pData3);
            //input(pData3);
            orgValue = GetCRCValue(pData,7);
            printf("循环冗余校验结果:%u\n",orgValue);
            //free(pData3);
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 5:
        {
            system("CLS");
            save();
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 6:
        {
            system("CLS");
            printf("\n谢谢使用!\n");
            exit(0);
        }
    }

}
此程序的目的在于,由用户自定义输入数据,让后按要求可以进行各种校验,并保存数据

原来我设计的还可以计算校验,改了现在这模样反而更纠结

数据比较混乱的样子

求高手改正错误,分我不会吝啬的
搜索更多相关主题的帖子: 数据 color 
2012-05-28 16:57
小糊涂神c30
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:198
专家分:809
注 册:2012-4-25
收藏
得分:50 
void input(unsigned char *pData)
{
    int n;
    for(i=0;i<n;i++)
    scanf("%x",&pData[i]);
}
n刚定义玩就是用,没有赋初值;

 case 1:
        {
            unsigned char *pData;
            creat(pData);
            input(pData);
            printf("\n按任意键返回\n");
            getchar();
            system("CLS");
            main();
        }
同样没有为pData赋初值,定义的指针一定要赋初值不然使用的话是很危险的!
代码没有能力完全改对,就当帮你顶贴了!
2012-05-28 19:12
jianyuling00
Rank: 3Rank: 3
来 自:琼州学院
等 级:论坛游侠
帖 子:89
专家分:177
注 册:2012-3-17
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

unsigned char xorTarget;
unsigned char addTarget;
unsigned int orgValue;
unsigned char *p = NULL;
int n;
int i;

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;

    printf("请输入要保存的地址:\n");
    getchar();
    gets(file);
    if((fp=fopen(file,"w"))==NULL)
    {
        printf("\n保存失败\n");
        getch();
        exit(0);
    }
    fprintf(fp,"%s",boy.SAV);
    fprintf(fp,"\n");
    for(i=0;i<5;i++)
    {
        fprintf(fp,"%x\t",*(p+i));
        ++flag;
        if(flag==4)
        {
            fprintf(fp,"\n\n");
            flag = 0;
        }

    }

    fprintf(fp,"\n");

    fprintf(fp,"%s",boy.sav);
    fprintf(fp,"\n");
    fprintf(fp,"0x%x\t\t0x%x\t\t%u",xorTarget,addTarget,orgValue);

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

void main(void)

{
    start:
    printf("\t\t\t简单数据校验\n");
    printf("1.录入数据\n");
    printf("2.异或校验\n");
    printf("3.累加和校验\n");
    printf("4.循环冗余校验\n");
    printf("5.数据保存\n");
    printf("6.退出校验\n");
    printf("\n请输入你的选择(1~6):");
    scanf("%d",&i);
    if(i<1||i>6)
    {
        printf("\n输入错误\n");
        goto start;
    }
    switch(i)
    {
        case 1:
        {
            int n,i;
            //unsigned char *p = NULL;
            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:
        {
            system("CLS");
            xorTarget = GetXorValue(p,7);
            printf("异或校验结果:0x%x\n",xorTarget);
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 3:
        {
            system("CLS");
            addTarget = GetAddValue(p,7);
            printf("累加和校验结果:0x%x\n",addTarget);
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 4:
        {
            system("CLS");
            orgValue = GetCRCValue(p,7);
            printf("循环冗余校验结果:%u\n",orgValue);
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 5:
        {
            system("CLS");
            save();
            printf("\n按任意键返回\n");
            getch();
            system("CLS");
            main();
        }
        case 6:
        {
            system("CLS");
            printf("\n谢谢使用!\n");
            exit(0);
        }
    }

}
自己搞定了!!!!!

完美,哈哈

散分咯~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2012-05-28 23:25
巴克
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:199
注 册:2012-2-8
收藏
得分:25 
接分
2012-05-29 06:46
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:25 
凑热闹

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-05-29 06:55
快速回复:数据校验,错误一大堆,求高手改正
数据加载中...
 
   



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

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