如何检查使用此程序输入的数字的基数?

时间:2013-04-29 03:50:46

标签: c

我的程序将输入的数字转换为所需的基数。但我想检查数字的当前基数。例如:Base 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; 
}

1 个答案:

答案 0 :(得分: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;

}