标题:10进制转换为其他进制,找了半天不知道哪错了,希望有大神帮忙看下
只看楼主
张珂珂
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:60
专家分:30
注 册: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
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:6 
reverse(a); 其中a是个字符数组(其实也不是当字符使用,而是当byte使用),根本不是以null结尾的字符串,怎么可以 k=strlen(a);
2020-03-26 23:30
张珂珂
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:60
专家分:30
注 册:2019-11-3
得分:0 
回复 2楼 rjsp
加上终止符'\0',令a[i]='\0',还是运行不对

长风吹过
2020-03-26 23:42
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册: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: 2
来 自:山东
等 级:论坛游民
帖 子:60
专家分:30
注 册:2019-11-3
得分:0 
回复 4楼 rjsp
谢谢大佬,不过字符数组应该可以用strlen?

长风吹过
2020-03-27 00:36
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册: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
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册: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: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:6 
一定在脑海里把字符串和“字符数组”分开理解,那些str开头的函数是处理字符串的,和“字符数组”没有任何关系。
当且仅当一个字符串存放在“字符数组”里面时,我们才能使用数组名表示该字符串。
记住,表示字符串 不等于 它就是字符串了,事实上一个负责任的数组的“体积”多半是远大于字符串的“体积”的,这个特征明确了二者的区别。

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

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-27 09:05
张珂珂
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:60
专家分:30
注 册:2019-11-3
得分:0 
回复 6楼 lin5161678
谢谢你

长风吹过
2020-03-27 10:13
张珂珂
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:60
专家分:30
注 册:2019-11-3
得分:0 
回复 7楼 rjsp
嗯嗯,我把a[i]=m%k改成a[i]=(m%k)+'0',下面输出改为printf("%c",a[j]);已经可以运行啦,谢谢!

长风吹过
2020-03-27 10:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500633-1-1.html




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

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