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