Navigator_Z 2023-10-09 15:55 采纳率: 0%
浏览 3

在函数中产生的指针变量无法在函数指针的参数中传递。

题目:
给一个不多于5位的正整数,要求:

  1. 求出它是几位数;
  2. 分别输出每一位数字;
  3. 按逆序输出各位数字,例如原数位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;
}
  • 写回答

2条回答 默认 最新

  • threenewbee 2023-10-09 15:56
    关注

    你这个程序一看就是GPT写的。人工就是几行的事:

    #include <stdio.h>
     
    int main()
    {
        int n;
        scanf("%d", &n);
        int arr[5];
        int cnt = 0;
        while (n)
        {
        arr[cnt++] = n % 10;
        n /= 10;
        }
        printf("%d位数\n", cnt);
        for (int i = cnt - 1; i >= 0; i--) printf("%d ", arr[i]);
        printf("\n");
        for (int i = 0; i < cnt; i++) printf("%d", arr[i]);
            return 0;
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 10月9日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改