unknown404
unknown404
2019-05-04 13:38
采纳率: 83.3%
浏览 1.3k

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);
    }
}


  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • qq_43479622
    BuXianShan 2019-05-04 14:34
    已采纳

    你好。请注意你的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;
    }
    
    点赞 评论
  • caozhy

    position[j] = num % (10 ^ (i + 1));
    ^符号在C语言里是XOR,不是平方。
    用pow函数代替。
    不过可以直接用itoa把输入转换成字符串数组。不需要判断长度+取每一位了。

    点赞 评论
  • qq_42208319
    qq_42208319 2019-05-04 16:44

    ^代表的位运算中的异或,不是多少次方,不能用。另一个你在for循环前,num已经为0了,所以对0取余的结果都是0.

    点赞 评论

相关推荐