C语言自定义函数被重复调用两次,如何消除多余调用?
C语言bolucu函数重复调用问题解答
问题根源
你的函数出现重复执行、重复输出的问题,是因为代码中对同一个输入值多次调用了bolucu函数,具体重复调用点:
- 首次读取用户输入的数字后,先单独执行了一次
bolucu(number); - 紧接着while循环的条件判断
while(bolucu(number) != 1)中,又对同一个number执行了一次bolucu - 循环内部读取新的数字后,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
相关产品推荐
相关产品推荐

