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

C语言自定义pwr()函数异常求助:返回值异常或输出空白

解决你的幂运算函数问题

嘿,作为C语言新手遇到这种问题太正常了,咱们来一步步把你的代码修好:

最致命的错误:混淆赋值与比较运算符

你在main函数里写的是:

num == pwr(5,2);
numn == pwr(2,5);

这里的==是比较运算符,用来判断左右两边的值是否相等,而不是给变量赋值!这就导致num和numn始终是未初始化的垃圾值,程序运行时就会出现输出0、1或者空白的奇怪情况——这属于C语言里的未定义行为。

你需要把==改成=(赋值运算符),这样函数的返回值才能正确存到变量里:

num = pwr(5,2);
numn = pwr(2,5);

补全pwr函数的逻辑

你的pwr函数代码没写完(if(pr<...中断了),而且循环逻辑也需要完善。一个完整的整数幂运算函数需要考虑几种边界情况,同时实现正确的循环乘法:

修正后的pwr函数

int pwr(int c, int pr) {
    int res = 1;
    // 处理0次幂:任何数的0次幂都是1
    if (pr == 0) {
        return 1;
    }
    // 处理负数次幂:整数不支持负数次幂,返回错误标记
    if (pr < 0) {
        printf("Error: 不支持负数次幂的整数运算\n");
        return -1; // 用-1表示错误
    }
    // 循环pr次,每次将res乘以底数c
    for (int i = 0; i < pr; i++) {
        res *= c;
    }
    return res;
}

完整的修正后代码

把所有修正点整合到一起,完整代码如下:

#include<stdio.h>
int pwr( int, int);
int main(){
    // 建议初始化变量,养成良好习惯
    int num = 0, numn = 0;
    num = pwr(5,2);
    numn = pwr(2,5);
    printf("First Number:%d\n",num);
    printf("Second Number:%d\n", numn);
    return 0;
}
int pwr(int c,int pr) {
    int res = 1;
    if (pr == 0) {
        return 1;
    }
    if (pr < 0) {
        printf("Error: 不支持负数次幂的整数运算\n");
        return -1;
    }
    for (int i = 0; i < pr; i++) {
        res *= c;
    }
    return res;
}

额外提醒

  • 永远记得初始化变量:未初始化的局部变量会包含随机值,引发各种奇怪的问题。
  • 写函数时要考虑边界情况:比如底数为0、指数为0或负数的情况,这些都是容易踩坑的点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:55:24