A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 77媛儿 中级黑马   /  2014-3-8 23:49  /  2011 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int n,R,i;
  5.     char *a[15];
  6.     printf("输入一个10进制整数\n");
  7.     scanf("%d",&n);
  8.     printf("输入要转换到多少进制\n");
  9.     scanf("%d",&R);
  10.     for (i=0;i<16;i++)
  11.     {
  12.         a[i]=n%R;
  13.         if (a[i]>=10)
  14.         {
  15.             a[i]='A'+a[i]-10;
  16.         }
  17.         n=n/R;
  18.     }
  19.        for (i=15;i>=0;i--) {
  20.       
  21.         printf("%s",a[i]);
  22.     }
  23.     printf("\n");
  24.     return 0;
  25.     }
复制代码

用指针表示二位数组,可是执行的时候貌似进入了死循环,求帮助。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 meegor 于 2014-3-9 11:39 编辑

余数判断没有进行,应该定义一个char a[15],而不是字符指针数组 char *a[15]

  1.     for (i=0;i<16;i++)
  2.     {
  3.         
  4.         while (n > 0)
  5.         {
  6.             
  7.             if (n%R >=10)
  8.             {
  9.                 a[i]='A'+n%R-10;
  10.             }
  11.             else
  12.                 a[i] = '0'+ n%R;
  13.             n=n/R;
  14.         }
  15.     }
复制代码

判断后还有一个问题,不用对a[15]全部遍历,因为a[15]不一定能存满

可以利用字符指针遍历,

下面是我自己写的一个例子,可以参考一下。

  1. #import <Foundation/Foundation.h>

  2. int main(int argc, const char * argv[])
  3. {
  4.     int num, base;
  5.     int quotient;
  6.     char store[100];
  7.     printf("请输入一个十进制整数:");
  8.     scanf("%d", &num);
  9.    
  10.     printf("\n你想把这个数转换成多少进制?\n请输入2-16之间任意整数:");
  11.     scanf("%d", &base);
  12.    
  13.     quotient = num;
  14.     int count = 0;
  15.     while (quotient > 0) {
  16.         if (quotient % base >= 10) {
  17.             store[count++] = (quotient % base) % 10 + 'A';
  18.         }
  19.         else
  20.             store[count++] = quotient % base + '0';
  21.         
  22.         quotient /= base;
  23.     }
  24.    
  25.     printf("\n%d的%d进制形式为:",num, base);
  26.    
  27.     int i ;
  28.     for (i = count - 1; i >= 0; i--) {
  29.         printf("%c", store[i]);
  30.     }

  31.     printf("\n");
  32.     return 0;
  33. }
复制代码
回复 使用道具 举报
meegor 发表于 2014-3-9 10:33
楼主只是应该用两个字符数组保存字符串啊,比如a[16] 用来保存0-F的16进制字符, b[100]用来保存转换后的字 ...

谢谢同学帮忙,我还在想怎么用一个数组同时保存int类型和char类型的数据呢
回复 使用道具 举报
77媛儿 发表于 2014-3-9 11:37
谢谢同学帮忙,我还在想怎么用一个数组同时保存int类型和char类型的数据呢
...

我的回答修改了一下,上次说的不太对 :)
回复 使用道具 举报
char *a[15];你的字符数组定小了,下面的数组已经越位。
将数组定义为 *a[16];

printf("%s",a[i]);这是输出字符串,改为%c,输出单个字符就行了。
或者要么直接后面a[i]改为a,也不用那个for循环了。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
77媛儿 发表于 2014-3-9 11:37
谢谢同学帮忙,我还在想怎么用一个数组同时保存int类型和char类型的数据呢
...

数组只能保存同一种类型的数据,你可以用结构体
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马