问题:
#include <stdio.h>
int main()
{
int num;
int i = 0;
int j;
int position[4] = {-1, -1, -1, -1};
printf("输入数字:");
scanf("%d", &num);
//判断有多少位数字
while(num >= 1)
{
num /= 10;
i ++; } //i是位数
printf("%d位数字\n", i);
//判断每位数字是什么
for(j = 0; j < i; j++)
{
position[j] = num % (10 ^ (i + 1));
//printf("%d\t", position[j]);
num = num - (num % 10);
printf("%d\t", num);
}
}
你好。请注意你的while循环使用了num,当while循环结束后num已经等于0了。但下面的for循环中又使用了num,所以肯定都是0。
应该先声明一个变量保存好num的值,例如t = num,在for循环前再把t的值给num(因为此时num已经为0了)。
还有你的for循环也有问题,我对你的代码做了如下更改,如有不懂可以再问我,希望可以帮到你。
#include<stdio.h>
int main()
{
int num;
int i = 0;
int j;
int position[4] = { -1, -1, -1, -1 };
printf("输入数字:");
scanf_s("%d", &num);
int t = num;//先保存好num的值
//判断有多少位数字
while (num >= 1)
{
num /= 10;
i++;
} //i是位数
printf("%d位数字\n", i);
//判断每位数字是什么
num = t;//把num原来的值再赋给它,for循环也做了更改
for (j = 0; j < i; j++)
{
position[j] = num % 10;
num = num / 10;
printf("%d\n", position[j]);
}
return 0;
}
position[j] = num % (10 ^ (i + 1));
^符号在C语言里是XOR,不是平方。
用pow函数代替。
不过可以直接用itoa把输入转换成字符串数组。不需要判断长度+取每一位了。
^代表的位运算中的异或,不是多少次方,不能用。另一个你在for循环前,num已经为0了,所以对0取余的结果都是0.