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

我的程序将输入的数字转换为所需的基数。 但我想检查数字的当前基数。 例如:Base 1为3,输入的数字为4,因此无法进行。 我写了函数来检查。 但它不起作用。 我的错在哪里?

#include  #include  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; } 

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