张小桐 2019-06-07 10:08 采纳率: 0%
浏览 344
已采纳

麻烦大神看下这个c语言其他进制转十进制程序哪里错了?

用c语言写的其他进制转10进制,输出结果是-nan(ind),哪里错了

#include<stdio.h>
#include<string.h>
#include<math.h>
float Decimal(char num[],int len,int flag,int poi)
{
    int i;
    int realnum[20];
    float sum1 = 0;
    float sum2 = 0;
    for (i = poi - 1; i >= 0; i--)
    {
        if (num[i] == 'A')
            realnum[i] = 10;
        if (num[i] == 'B')
            realnum[i] = 11;
        if (num[i] == 'C')
            realnum[i] = 12;
        if (num[i] == 'D')
            realnum[i] = 13;
        if (num[i] == 'E')
            realnum[i] = 14;
        if (num[i] == 'F')
            realnum[i] = 15;
        else
            realnum[i] = num[i] - '0';
        sum1 = sum1 + realnum[i] * pow(flag, (poi - i-1));
    }
    for (i = poi + 1; i < len; i++)
    {
        if (num[i] == 'A')
            realnum[i] = 10;
        if (num[i] == 'B')
            realnum[i] = 11;
        if (num[i] == 'C')
            realnum[i] = 12;
        if (num[i] == 'D')
            realnum[i] = 13;
        if (num[i] == 'E')
            realnum[i] = 14;
        if (num[i] == 'F')
            realnum[i] = 15;
        else
            realnum[i] = num[i] - '0';
        sum2 = sum2 + realnum[i] * pow(flag, (poi - i));
    }
    return sum1 + sum2;
}
float NoDecimal(char num[], int len, int flag)
{
    int i;
    int realnum[20];
    float sum=0;
    for (i = len - 1; i >= 0; i--)
    {
        if (num[i] == 'A')
            realnum[i] = 10;
        if (num[i] == 'B')
            realnum[i] = 11;
        if (num[i] == 'C')
            realnum[i] = 12;
        if (num[i] == 'D')
            realnum[i] = 13;
        if (num[i] == 'E')
            realnum[i] = 14;
        if (num[i] == 'F')
            realnum[i] = 15;
        else
            realnum[i] = num[i] - '0';
        sum = sum + realnum[i] * pow(flag, (len - i - 1));
    }
    return sum;
}
float Change_to_10(int flag)
{
    int len,i;
    float result1, result2;
    char num[20];
    printf("请输入你要转换的%d进制数\n", flag);
    scanf("%f", num);
    len = strlen(num);
    for (i = 0; i < len; i++)
    {
        if (num[i] == '.')
        {
            result1 = Decimal(num, len, flag,i);
            return result1;
            break;
        }
        else
        {
            result2 = NoDecimal(num, len, flag);
            return result2;
            break;
        }

    }
}
int main()
{
    int flag;
    float a;
    scanf("%d", &flag);
    a=Change_to_10(flag);
    printf("转化成10进制数是%f", a);
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 茂大叔 2019-06-07 17:04
    关注

    Change_to_10里面的scanf("%f", num);
    这个地方应该是输入一个串才对吧,你给输入一个浮点数了,放进num这个地址……改成scanf("%19s", num)试一试呢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流