注册 登录
编程论坛 C语言论坛

10进制转换为其他进制,找了半天不知道哪错了,希望有大神帮忙看下

张珂珂 发布于 2020-03-26 23:14, 1970 次点击
程序代码:
#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;
    }
}

只有本站会员才能查看附件,请 登录
10 回复
#2
rjsp2020-03-26 23:30
reverse(a); 其中a是个字符数组(其实也不是当字符使用,而是当byte使用),根本不是以null结尾的字符串,怎么可以 k=strlen(a);
#3
张珂珂2020-03-26 23:42
回复 2楼 rjsp
加上终止符'\0',令a[i]='\0',还是运行不对
#4
rjsp2020-03-27 00:00
以下是引用张珂珂在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 );
}

#5
张珂珂2020-03-27 00:36
回复 4楼 rjsp
谢谢大佬,不过字符数组应该可以用strlen?
只有本站会员才能查看附件,请 登录
#6
lin51616782020-03-27 01:12
以下是引用张珂珂在2020-3-27 00:36:41的发言:

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

char 不能用%d 输入
#7
rjsp2020-03-27 08:30
以下是引用张珂珂在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。
#8
forever742020-03-27 09:05
一定在脑海里把字符串和“字符数组”分开理解,那些str开头的函数是处理字符串的,和“字符数组”没有任何关系。
当且仅当一个字符串存放在“字符数组”里面时,我们才能使用数组名表示该字符串。
记住,表示字符串 不等于 它就是字符串了,事实上一个负责任的数组的“体积”多半是远大于字符串的“体积”的,这个特征明确了二者的区别。

由于口语读法对思维潜移默化的影响,我一直不建议把char[]叫做字符数组,这也是为什么上面坚持用引号。
建议把这个东西口头读作“ 'C' 'H' 'A' 'R'数组”,对,读成6个字,用来坚持不懈地提醒自己,那本来是一种用来存放范围很小的整数的类型,只不过有时候用来存放多个字符,有时候用来存放字符串。
#9
张珂珂2020-03-27 10:13
回复 6楼 lin5161678
谢谢你
#10
张珂珂2020-03-27 10:16
回复 7楼 rjsp
嗯嗯,我把a[i]=m%k改成a[i]=(m%k)+'0',下面输出改为printf("%c",a[j]);已经可以运行啦,谢谢!
#11
张珂珂2020-03-27 10:16
回复 8楼 forever74
谢谢!明白了
1