C语言中数组赋值的问题

问题:

  • 小白尝试使用c语言实现转化阿拉伯数字到大写汉字
  • 我想分两步走,第一步算出几位数字没问题, 第二部通过取余数分别取出个十百千位数字
  • 取余数失败, position数组中所有赋值都是零
  • 我看了一晚上也没研究明白, 求大神指点, 感激不尽
#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.