成功解决“函数用于调用的参数太少/太多”问题

举报
修修修也 发表于 2024/03/30 13:26:11 2024/03/30
【摘要】 通俗易懂的讲解编程过程中为何会报错“函数用于调用的参数太少”及其解决方案。

问题描述

我们在使用C语言编写程序,特别是使用函数递归时经常会遇到编译器报错“用于调用的参数太少/太多”,如图:

那么遇到这种情况我们该如何解决呢?


原因分析

首先以下面一段代码为例向大家解释问题到底出在哪里:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int power(int x,int y)
{
    if (y>1)
    {
        return x * power(y-1);
    }
    else
    {
        return x;
    }
}

int main()
{
    int n = 0;
    int k = 0;
    scanf("%d %d", &n,&k);
    printf("%d",power(n, k));

    return 0;
}

如图,这是一段使用函数递归的方式求解n的k次方的程序代码。看似没有什么问题,但如果你原封不动的将该段代码放在编译器运行时却会导致编译器报错,如图:

然而问题就出在第 7行代码:

return x * power(y-1);


注意,power函数在定义时是创建了两个形式参数的,即x和y:

int power(int x,int y)

那么在后续调用power函数时就需要传给它两个参数才行,而第七行代码明显只传给了power函数一个参数,因此会导致编译器报错“用于调用的参数太少”。


解决方法

在搞清楚了编译器为何会报错之后,我们的解决方法也非常简单,即,将原代码改为:

    return x * power(x,y-1);

这样就确保了在调用函数时会传给power函数两个参数供其使用,就可以防止编译器报错。

当然,如果你在定义函数时创建了三个甚或是更多的形式参数,那么就请务必在后续调用该函数时传给它数量相同的参数供函数使用,这样就能保证编译器不会报错啦。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。