| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 673 人关注过本帖
标题:c语言程序运行出错,求大神帮忙
只看楼主 加入收藏
_alex
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2013-7-30
结帖率:80%
收藏
已结贴  问题点数:5 回复次数:7 
c语言程序运行出错,求大神帮忙
#include<stdio.h>
#include<string.h>
int ids(char *m)/*identify size*/
{
    int n;  
    if(strcmp(m,"1/2")==0||strcmp(m,"0.5")==0)   
        n=0;  
    if(strcmp(m,"3/4")==0||strcmp(m,"0.75")==0)   
        n=1;  
    if(strcmp(m,"1")==0)   
        n=2;  
    if(strcmp(m,"1-1/2")==0||strcmp(m,"1.5")==0)   
        n=3;
    if(strcmp(m,"2")==0)   
        n=4;  
    if(strcmp(m,"2-1/2")==0||strcmp(m,"2.5")==0)   
        n=5;  
    if(strcmp(m,"3")==0)   
        n=6;  
    if(strcmp(m,"3-1/2")==0||strcmp(m,"3.5")==0)   
        n=7;  
    if(strcmp(m,"4")==0)   
        n=8;
    if(strcmp(m,"4-1/2")==0)   
        n=9;  
    if(strcmp(m,"5")==0)   
        n=10;
    if(strcmp(m,"6")==0)   
        n=11;
    if(strcmp(m,"7")==0)
        n=12;  
    if(strcmp(m,"8")==0)   
        n=13;
    if(strcmp(m,"9")==0)   
        n=14;
    if(strcmp(m,"10")==0)
        n=15;  
    return n;
}  
int idc(char *p)/*identify class*/
{
    int q;  
    if(strcmp(p,"1")==0)   
        q=0;
    if(strcmp(p,"2")==0)
        q=1;  
    if(strcmp(p,"3")==0)
        q=2;
    if(strcmp(p,"4")==0)   
        q=3;
    if(strcmp(p,"5")==0)   
        q=4;
    if(strcmp(p,"6")==0)   
        q=5;
    return q;
}
void main()
{
    int i,j;  int cou=0;//计算有多少行数据要处理  
    char a[100][5],b[100][5],c[100][5];  
    int g,h,k,l,m,x,y;
    int leap1,leap2,leap3,leap4;  
    char (*array1)[5];  
    char (*array2)[5];  
    char type[100][20]={0};  
    FILE *fp1;/*input*/
    fp1=fopen("in.txt","r");  
    if(fp1==NULL)
    {   
        printf("file open error!\n");   
        return ;//文件不存在就退出系统  
    }  
    for(i=0;i<100 ;i++,cou++)//cou在这里计算得出  
    {    if(EOF==fscanf(fp1,"%s\n",type[i]))//如果读到空行就退出循环   
         break;   //
         printf("%s\n",type[i]);
    }  
    fclose(fp1);

leap1=leap2=leap3=leap4=1;
for(i=0;i<cou;i++)//resolve  
{   
    g=h=k=l=m=j=0;   
    while(leap1&&j<20)      
    {        
        if(type[i][j]<'A'||type[i][j]>'Z')         
        {            
            a[i][g]=type[i][j];j++;g++;         
        }      
        else        
        {           
            j++;leap1=0;         
        }     
    }   
    while(leap2&&j<20)      
    {        
        if(type[i][j]>='A'&&type[i][j]<='Z')         
        {            
            b[i][h]=type[i][j];j++;h++;         
        }        
        else         
        {            
            j++;leap2=0;         
        }   
    }   
    while(leap3&&j<20)     
    {      
        if(type[i][j]>='0'&&type[i][j]<='9')         
        {           
            c[i][k]=type[i][j];j++;k++;        
        }      
        else         
        {           
            j++;leap3=0;         
        }   
    }   
    while(leap4&&j<20)   
    {      
        if(type[i][j]>='A'&&type[i][j]<='Z')        
        {           
            b[i][h]=type[i][j];j++;h++;        
        }      
        else         
        {         
            j=j+2;leap4=0;        
        }
    }   
    while(type[i][j]>'0'&&type[i][j]<'9'||type[i][j]>='A'&&type[i][j]<='Z')//distinguish'\'   
    {      
        b[i][h]=type[i][j];
        j++;
        h++;  
    }
  *array1=a[100][5];   
  *array2=c[100][5];   
  x=ids(array1);  
  y=idc(array2);   
  printf("%d\n%d\n",x,y);   
}
}
目的是为了一串字符分解开来,如1-1/2X3Y,MN12这种类型,首先是一个整数或分数,小数,然后第二是1-3个字母,然后第三是一个整数,第四是字母,第五是逗号,第六逗号之后的数不确定。程序目的是把逗号之前的字母和逗号后的所有内容分到同一个二维数组中,把字符串中两个数字分别放到两个数组中。但是下面这程序可以读入数组,但是算法好像不能执行,运行结束后结果应该是x=3  y=2,能麻烦看下算法吗?是不是我二维数组的指针用错了?
搜索更多相关主题的帖子: c语言程序 identify include 
2013-08-18 20:05
_alex
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2013-7-30
收藏
得分:0 
中间指针是一开始是定义的   char *array1;
                           char *array2;刚试了下忘改回来了  
2013-08-18 20:07
_alex
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2013-7-30
收藏
得分:0 
新手求大神指导下啊
2013-08-19 11:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没法看,没法改。用你的数据写几个最终结果来看看到底是什么意图,并把数据文件传上来。

授人以渔,不授人以鱼。
2013-08-19 12:05
_alex
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2013-7-30
收藏
得分:0 
in.rar (448 Bytes)
结果是: x=6,y=0 BSRWCB
                      x=8,y=0 BRWCB
                      x=0,y=2 BRWCB
                      ......
2013-08-19 14:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
根据你的需求,我简单写了一个,你自己再改改
(其实,你还可以将字符串对应的数值做成对应表,然后用qsort排序,以后bsearch操作,这样一来,以后增加表项简单、代码没有那么对if会简单,效率又高)

程序代码:
#include <stdio.h>
#include <string.h>

int main()
{
    const char* strs[] = { "1-1/2X3Y,MN12"  // x=3  y=2
                         , "3BS1R,WCB"      // x=6,y=0 BSRWCB
                         , "4B1R,WCB"       // x=8,y=0 BRWCB
                         , "1/2B3R,WCB" };  // x=0,y=2 BRWCB

    for( size_t i=0; i!=sizeof(strs)/sizeof(strs[0]); ++i )
    {
        double a=0;
        unsigned b=0, c=1, e;
        char d[4], f[2]={'\0','\0'}, g[256];
        if( ( a=0,b=0,c=1, 7 != sscanf( strs[i], "%lf-%u/%u%[A-Z]%u%c,%s", &a, &b, &c, d, &e, f, g ) )
            && ( a=0,b=0,c=1, 5 != sscanf( strs[i], "%lf%[A-Z]%u%c,%s", &a, d, &e, f, g ) )
            && ( a=0,b=0,c=1, 6 != sscanf( strs[i], "%u/%u%[A-Z]%u%c,%s", &b, &c, d, &e, f, g ) ) )
        {
            printf( "%s\n", "--- error ---" );
            continue;
        }

        unsigned x=0, y=0;
        char z[256];
        {
            double r = a + b*1.0/c;
            if( r < 1.0 )
                x = (unsigned)((r-0.5)*4);
            else if( r < 5.0 )
                x = (unsigned)(r*2);
            else
                x = (unsigned)(r+5);

            y = e-1;

            strcpy( z, d );
            strcat( z, f );
            strcat( z, g );
        }
        printf( "x=%u, y=%u, %s\n", x, y, z );
    }

    return 0;
}

2013-08-19 16:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
因为没事做,用 二分法查找 的算法也帮你写一下吧

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct foo
{
    char str[12];
    unsigned x;
};

int __cdecl foo_compare( const void* a, const void* b )
{
    return strcmp( (const char*)a, (const char*)b );
}

int main()
{
    foo maps[] = { "1/2",   0
                 , "0.5",   0
                 , "3/4",   1
                 , "0.75",  1
                 , "1",     2
                 , "1-1/2", 3
                 , "1.5",   3
                 , "2",     4
                 , "2-1/2", 5
                 , "2.5",   5
                 , "3",     6
                 , "3-1/2", 7
                 , "3.5",   7
                 , "4",     8
                 , "4-1/2", 9
                 , "5",    10
                 , "6",    11
                 , "7",    12
                 , "8",    13
                 , "9",    14
                 , "10",   15 };
    qsort( maps, sizeof(maps)/sizeof(maps[0]), sizeof(maps[0]), &foo_compare );

    const char* strs[] = { "1-1/2X3Y,MN12"  // x=3  y=2
                         , "3BS1R,WCB"      // x=6,y=0 BSRWCB
                         , "4B1R,WCB"       // x=8,y=0 BRWCB
                         , "1/2B3R,WCB" };  // x=0,y=2 BRWCB

    for( size_t i=0; i!=sizeof(strs)/sizeof(strs[0]); ++i )
    {
        char a[12], b[4], d, e[256];
        unsigned c;
        const foo* p;
        if( 5 != sscanf( strs[i], "%[^A-Z]%[A-Z]%u%c,%s", a, b, &c, &d, e )
            || NULL == (p = (const foo*)bsearch( a, maps, sizeof(maps)/sizeof(maps[0]), sizeof(maps[0]), &foo_compare )) )
        {
            printf( "%s\n", "--- error ---" );
            continue;
        }

        printf( "x=%u, y=%u, %s%c%s\n", p->x, c-1, b, d, e );
    }

    return 0;
}

2013-08-19 16:46
_alex
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2013-7-30
收藏
得分:0 
先膜拜下,容我好好学学
2013-08-19 18:00
快速回复:c语言程序运行出错,求大神帮忙
数据加载中...
 
   



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

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