| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 208 人关注过本帖
标题:10进制转换为其他进制,找了半天不知道哪错了,希望有大神帮忙看下
只看楼主 加入收藏
张珂珂
Rank: 1
来 自:山东
等 级:新手上路
帖 子:31
专家分:0
注 册:2019-11-3
结帖率:100%
  已结贴   问题点数:18  回复次数:10   
10进制转换为其他进制,找了半天不知道哪错了,希望有大神帮忙看下
程序代码:
#include<stdio.h>
#include<string.h>
void convert(int m,int k,char a[]);
void  reverse(char a[]);
int main()
{
    int m,k;
    char array[20];
    printf("input m k:");
    scanf("%d %d",&m,&k);
    convert(m,k,array);
    return 0;
}
void convert(int m,int k,char a[])
{
    int i;
    for(i=0;m!=0;i++)
    {
        a[i]=m%k;
        m=m/k;
    }
    reverse(a);
    for(int j=0;j<i-1;j++)
    {
        printf("%d",a[j]);
    }
}
void  reverse(char a[])
{
    int k,i;
    char t;
    k=strlen(a);
    for(i=0;i<=k/2;i++)
    {
        t=a[i];
        a[i]=a[k-i-1];
        a[k-i-1]=t;
    }
}

附件: 您没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: 进制转 int 其他 char void 
2020-03-26 23:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:349
帖 子:7152
专家分:41644
注 册:2011-1-18
  得分:6 
reverse(a); 其中a是个字符数组(其实也不是当字符使用,而是当byte使用),根本不是以null结尾的字符串,怎么可以 k=strlen(a);
2020-03-26 23:30
张珂珂
Rank: 1
来 自:山东
等 级:新手上路
帖 子:31
专家分:0
注 册:2019-11-3
  得分:0 
回复 2楼 rjsp
加上终止符'\0',令a[i]='\0',还是运行不对
2020-03-26 23:42
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:349
帖 子:7152
专家分:41644
注 册:2011-1-18
  得分:0 
以下是引用张珂珂在2020-3-26 23:42:12的发言:

加上终止符'\0',令a='\0',还是运行不对
a 又不是字符串,你加 '\0' 干什么?

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

void convert( unsigned m, unsigned k )
{
    if( m == 0 )
    {
        puts( "0" );
        return;
    }
    assert( k > 1 );
   

    char buf[100] = { [99]='\0' };
    char* p = buf+99;
    for( ; m!=0; m/=k )
        *--p = m%k + '0';
    puts( p );
}

int main( void )
{
    unsigned m,k;
    printf( "input m k: " );
    scanf( "%u%u", &m, &k );
    convert( m, k );
}

2020-03-27 00:00
张珂珂
Rank: 1
来 自:山东
等 级:新手上路
帖 子:31
专家分:0
注 册:2019-11-3
  得分:0 
回复 4楼 rjsp
谢谢大佬,不过字符数组应该可以用strlen?
附件: 您没有浏览附件的权限,请 登录注册
2020-03-27 00:36
lin5161678
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:836
专家分:2489
注 册:2011-12-3
  得分:6 
以下是引用张珂珂在2020-3-27 00:36:41的发言:

谢谢大佬,不过字符数组应该可以用strlen?

char 不能用%d 输入

https://zh.
2020-03-27 01:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:349
帖 子:7152
专家分:41644
注 册:2011-1-18
  得分:0 
以下是引用张珂珂在2020-3-27 00:36:41的发言:

谢谢大佬,不过字符数组应该可以用strlen?

你看一下你的代码
    for(i=0;m!=0;i++)
    {
        a[i]=m%k;
        m=m/k;
    }
其中 a[i] 保存的是 0、1、2、…… 等等,不是 '0'、'1'、'2'、…… 等等,怎么可以用 strlen ? 尤其是有效数据本身就包含了0。
2020-03-27 08:30
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:29
帖 子:1440
专家分:2984
注 册:2007-12-27
  得分:6 
一定在脑海里把字符串和“字符数组”分开理解,那些str开头的函数是处理字符串的,和“字符数组”没有任何关系。
当且仅当一个字符串存放在“字符数组”里面时,我们才能使用数组名表示该字符串。
记住,表示字符串 不等于 它就是字符串了,事实上一个负责任的数组的“体积”多半是远大于字符串的“体积”的,这个特征明确了二者的区别。

由于口语读法对思维潜移默化的影响,我一直不建议把char[]叫做字符数组,这也是为什么上面坚持用引号。
建议把这个东西口头读作“ 'C' 'H' 'A' 'R'数组”,对,读成6个字,用来坚持不懈地提醒自己,那本来是一种用来存放范围很小的整数的类型,只不过有时候用来存放多个字符,有时候用来存放字符串。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-27 09:05
张珂珂
Rank: 1
来 自:山东
等 级:新手上路
帖 子:31
专家分:0
注 册:2019-11-3
  得分:0 
回复 6楼 lin5161678
谢谢你
2020-03-27 10:13
张珂珂
Rank: 1
来 自:山东
等 级:新手上路
帖 子:31
专家分:0
注 册:2019-11-3
  得分:0 
回复 7楼 rjsp
嗯嗯,我把a[i]=m%k改成a[i]=(m%k)+'0',下面输出改为printf("%c",a[j]);已经可以运行啦,谢谢!
2020-03-27 10:16
快速回复:10进制转换为其他进制,找了半天不知道哪错了,希望有大神帮忙看下
数据加载中...
 
   



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

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