题目:
给一个不多于5位的正整数,要求:
- 求出它是几位数;
- 分别输出每一位数字;
- 按逆序输出各位数字,例如原数位321,应输出123。
以下程序我在使用函数指针调用时,发现其中参数"number"和"digit"无法传递到每个函数中。
我希望函数指针中的参数能由其他函数产生指针变量传递。
#include <stdio.h>
#include <stdlib.h>
void inputNumber(int *number){
printf("Enter number: ");
scanf_s("%d", number);
while(*number <= 0 || *number > 9999){
if(*number <= 0){
printf("The number is not positive integer! Retry!\nEnter number: ");
}
if(*number > 9999){
printf("The number is more than 5 digits! Retry!\nEnter number: ");
}
scanf_s("%d", number);
}
}
void outputDigit(int *number, int *digit){
int i;
for(i = 0; *number != 0; i++){
*number /= 10;
}
*digit = i;
//printf("%d\n", *number); Test Output
printf("The number is %d digits!\n", i);
}
void outputNumber(int *number, int *digit){
int base = 10;
int temp = *number;
for(int i = 1; i < *digit - 1; i++){
base *= 10;
}
//printf("%d %d\n", *number, temp); Test Output
for(int i = 0; i < *digit; i++){
printf("%d ", temp / base);
temp -= temp / base * base;
base /= 10;
}
printf("\n");
}
void outputReverseNumber(int *number, int *digit){
int temp = *number;
for(int i = 0; i < *digit; i++){
printf("%d ", temp % 10);
temp = (temp - temp % 10) / 10;
}
printf("\n");
}
void function(int *number, int *digit, void (*fun[])(int*, int*)){
for(int i = 0; i < 3; i++){
fun[i](number, digit);
}
}
int main(){
int *number = (int*)malloc(sizeof(int));
int *digit = (int*)malloc(sizeof(int));
void (*fun[3])(int*, int*) = {outputDigit, outputNumber, outputReverseNumber};
inputNumber(number);
function(number, digit, fun);
free(number);
free(digit);
system("pause");
return 0;
}