-2

我的程序将输入的数字转换为所需的基数。但我想检查数字的当前基数。例如:基数 1 是 3,输入的数字是 4,所以这是不可能的。我编写了函数来检查它。但它不起作用。我的错在哪里?

#include <stdlib.h>
#include <stdio.h>

int check(int tmp_number , int source_base)
{
    int check = 0 ;
    char msg[tmp_number];
    sprintf(msg, "%d", tmp_number);
    int i=0;
    if(source_base>tmp_number)
    {
    return 1;
    }
 while( tmp_number )
    {

        if(check<source_base)
        {
        check =  tmp_number % 10 ;
        tmp_number /= 10 ;
        i++;
        }

    }
     if (sizeof(msg)==i)
     {
     return 1;
     }
    else
     {
     return 0;
     }

}

int main()
{

    int tmp_number=1;
    int decimal=0;
    int source_base,target_base;
    char s[9];
    int i=0;
    do
    {
        printf("Enter the base1\n");
    scanf("%d",&source_base);

    printf("Enter the number\n");
    scanf("%d",&tmp_number);
    } while (!check(tmp_number,source_base));

    printf("Enter the base2\n");
    scanf("%d",&target_base);


     while( tmp_number )
    {
    decimal += (tmp_number % 10) * pow( source_base, i ) ;
    tmp_number /= 10 ;
    ++i ;
    }
    itoa(decimal, s, target_base);
    printf("The result is %s\n", s);

   getchar();
    getchar();

return 1; 
}
4

1 回答 1

1
char msg[tmp_number];

创建一个非常大的数组(你的数字值的大小,而不是你的数字的长度),并且sizeof(msg) == i只有当数字正好是1. 您可以通过查找数字的长度并创建该大小的数组来修复您的代码,但最好像这样重写它:

int check(int tmp_number , int source_base)
{

    int check;
    while( tmp_number )
    {
        check = tmp_number % 10;
        tmp_number /= 10 ;

        if(check >= source_base)
            return 0;

    }

    return 1;

}
于 2013-04-29T04:09:08.817 回答