原题是这样的:
输入一个五位以内(含五位)的正整数
(1)判断它是一个几位数;
(2)请按序输出其各位数字;
(3)逆序输出其各位数字。
要求:使用指针
如输入:56439,
输出:
五位数
5,6,4,3,9
9,3,4,6,5
我已经实现输入数据,判断位数,并将每一位存到一个数组中。因为事先不知道用户要输入几位,所以数组按照有可能输入的最大数来定义,即输入五位数,,定义一个长度为5的数组a[5],把每一位装进数组中。但是假如用户输入了小于5位数的,并且这个数的中间有某一位是0,比如1004,那么这个时候数组各元素为{0,1,0,0,4},我的问题是:如何能按照题意,输出1,0,0,4 和4,0,0,1 ?
下面是我的代码段:
#include <stdio.h>
int main(int argc, const char * argv[]) {
unsigned long n = 0;
//输入一个数
while (1) {
printf("Input a number(0~9999): \n");
scanf("%lu", &n);
if (n > 0 && n < 100000) {
break;
}
}
//判断是几位数
//每一位存入数组
int i = 0;
int a[5] = {0};
int *p = &a[4];
while (n != 0) {
*p = n % 10;
n /= 10;
i++;
p--;
}
printf("\ndigit:%d\n\n",i);
//遍历数组,输出元素
for (int i = 0; i < 5; i++) {
printf("%d ", a[i]);
}
printf("\n");
//倒序输出元素
for (int i = 4; i >= 0; i--) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
题主已经将1004解析成了{0, 1, 0, 0, 4}数组,然后遇到的问题是第一个占位的0(其实代表没有该位)与后面的有效0(该位上的数据为0)无法区分。题主只需将占位符换成一个其他的唯一含义字符便可消除0的二义性了。比如
// 用PLACEHOLDER填充数组,输出时过滤掉PLACEHOLDER位
#define PLACEHOLDER 0xff