You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言自定义函数被重复调用两次,如何消除多余调用?

C语言bolucu函数重复调用问题解答

问题根源

你的函数出现重复执行、重复输出的问题,是因为代码中对同一个输入值多次调用了bolucu函数,具体重复调用点:

  1. 首次读取用户输入的数字后,先单独执行了一次bolucu(number);
  2. 紧接着while循环的条件判断while(bolucu(number) != 1)中,又对同一个number执行了一次bolucu
  3. 循环内部读取新的数字后,printf语句里又调用了一次bolucu(number),下一轮循环判断时还会再调用一次,进一步导致重复输出

修复方法

每次读取用户输入的数字后,仅调用一次bolucu函数,用变量存储它的返回值,后续的条件判断、打印操作都直接使用这个存储的返回值,不需要再次调用函数。

修改后的完整代码

#include <stdio.h>
int bolucu(int n){
    int temp;
    temp=n;
    int basamak=0;
    while(temp != 0){
        temp/=10;
        ++basamak;
    }
    int digits = 0;
    int m = n;
    while (m) {
        digits++;
        m /= 10;
    }
    digits /= 2;
    int tmp = 0, lower_half = 0;
    while (digits--) {
        tmp *= 10;
        tmp += n % 10;
        n /= 10;
    }
    while (tmp) {
        lower_half *= 10;
        lower_half += tmp % 10;
        tmp /= 10;
    }
    if (basamak % 2==1){
        n/=10;
    }
    int a;
    int b;
    a = n;
    b=lower_half;
    printf("%d %d\n",a,b);
    int loopTemp;
    for(int i=0;i<10;i++){
        a=3*a+2;
        b=2*b+3;
        if(a>b){
            temp=a;
            a=b;
            b=temp;
        }
        if(a==b){
            printf("Congratulations you caught one!!!\n");
            return 1;
        }
    }
    printf("10 tries were not enough!\n");
    return 2;
}
int main()
{
    int number, res;
    printf("\nEnter a number with at least two digits: ");
    scanf("%d",&number);
    // 仅调用一次,用res存储返回值
    res = bolucu(number);
    while(res != 1){
        printf("\nEnter a new number: ");
        scanf("%d",&number);
        // 每次输入新数字仅调用一次
        res = bolucu(number);
        printf("%d",res);
    }
    return 0;
}

注:原bolucu函数中return 1;后的break语句永远不会执行,属于冗余代码,上述代码中已做删除。

内容的提问来源于stack exchange,提问作者Cenk28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:24:03