| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 372 人关注过本帖
标题:又出问题了。。。。
只看楼主 加入收藏
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
结帖率:84.21%
收藏
已结贴  问题点数:20 回复次数:4 
又出问题了。。。。
程序功能,实现16进制转换成10进制数,并且删点16进制开头的ox符号,我的想法是能够多次输入,多次转换,可是只有第一次输出的值正确,后面的值就乱了。。。程序如下:
程序代码:
#include<stdio.h>
#define MAXLINE 1000
int getline(char line[],int maxline);       //控制输入字符串子函数
int calclen(char line[]);                   //计算字符串长度子函数 
int htoi(char a);                           //字符转换成整形子函数
int main()
{
    int len,s,i,j,index,temp=1;
    int int_line[MAXLINE];
    char line[MAXLINE];
    s=0;
    while((len=getline(line,MAXLINE))>0)
    {
        i=0;
        while(line[i]!='\0')                  //删除16进制数开头的ox字符    
        {
            if(line[0]=='o'||line[0]=='x'||line[0]=='O'||line[0]=='X')
                for(j=0;j<len;j++)
                    line[j]=line[j+1];
            else break;
            ++i;
        }
        index=calclen(line);                  //计算字符串长度
        for(i=0;i<index;++i)                  //将转换好的整形数赋给int_line数组
            int_line[i]=htoi(line[i]);
        for(i=index-1;i>=0;--i)               //10进制转换
        {
            s+=int_line[i]*temp;
            temp=temp*16;
        }
        printf("转换成十进制数为:%d\n",s);   
        fflush(stdin);
    }
    return 0;
}
int getline(char s[],int lim)
{
    int c,i;
    for(i=0;i<lim-1&&(c=getchar())!='`'&&c!='\n';++i)
        s[i]=c;
    if(c=='\n')
    {
        s[i]=c;
        ++i;
    }
    s[i]='\0';
    fflush(stdin);
    return i;
}
int calclen(char line[])
{
    int i;
    i=0;
    while(line[i]!='\n')
        ++i;
    return i;
}
int htoi(int a)
{
    int s;
    if(a>='0'&&a<='9')
        s=a-'0';
    else if(a>='A'&a<='F')
        s=a-55;
    else s=a-87;
    return s;
}
2012-11-15 19:14
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:2 
这些都是多余的
int a;
scanf("%x", &a);
printf("%d\n", a);
这就足够了。0x会被自动滤掉,输入时加不加都没有问题。

重剑无锋,大巧不工
2012-11-15 20:00
youngdavid
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:698
注 册:2012-9-24
收藏
得分:18 
把temp和s的值初始化放在while循环里面就对了。如果初始化在外面的话,第二次转换的s的值会累加在第一次上面,另外temp也会累加,所以会报错。
2012-11-15 21:37
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
收藏
得分:0 
回复 2楼 beyondyf
谢beyondy版,我现在是由简化繁,练习码代码,什么练习谢子函数,宏定义什么的,反正能用的都用上,呵呵,等熟悉的差不多了,在由繁化简,自学只能自己找方法吧,不知道版主有什么好建议
2012-11-16 09:29
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
收藏
得分:0 
回复 3楼 youngdavid
一语中的!!!谢谢啦
2012-11-16 09:32
快速回复:又出问题了。。。。
数据加载中...
 
   



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

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