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

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

问题描述

我们在使用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函数两个参数供其使用,就可以防止编译器报错

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





相关文章
|
19天前
|
Java 开发工具
JVM参数太多?一网打尽常用JVM参数!
JVM参数太多?一网打尽常用JVM参数!
|
11月前
|
数据采集 搜索推荐 小程序
编程新手:看懂很多示例,却依然写不好一个程序
当然题目本身难度不高,和我们公众号【每周一坑】栏目里的题相比,这个算是小 case 了。不过如果你是一个刚刚接触编程不久,才掌握条件判断、循环、列表的新手来说,还是有点小挑战的。
|
12月前
|
前端开发 开发者
will-change 属性细节太多了,一般人玩不好
will-change 被定义为浏览器最后的优化手段,它的作用是告诉浏览器,这个元素将要发生变化,浏览器可以提前做一些准备工作,当元素发生变化时,浏览器就不需要再做一些额外的工作,从而提高性能。
179 0
will-change 属性细节太多了,一般人玩不好
|
Java
这4种方式,统计代码执行耗时,才足够优雅!
这4种方式,统计代码执行耗时,才足够优雅!
284 0
【每日SQL打卡】​​​​​​​​​​​​​​​DAY 27丨每次访问的交易次数【难度困难-提前放出来】​
【每日SQL打卡】​​​​​​​​​​​​​​​DAY 27丨每次访问的交易次数【难度困难-提前放出来】​
|
小程序
小程序 onLaunch 参数差别
小程序 onLaunch 参数差别
447 0
小程序 onLaunch 参数差别
|
缓存 Java 数据库
如何避免无意间创建多余对象
6 避免创建不必要的对象 从字面意思上来看,大家肯定都知道创建不必要的对象是错误的做法。但这一节其实主要是提醒我们避免无意识的创建不必要对象的代码写法。
如何避免无意间创建多余对象
|
SQL BI 关系型数据库
参数为空取全部数据的几种做法
当通过多个参数对数据进行过滤并且不选择某个参数时,希望依然能够查询出其他带条件的数据,也就是参数为空时忽略掉该条件,点击 <a href="http://c.raqsoft.com.cn/article/1543386793666?r=IBelieve" target="_blank" rel="n...
984 0
|
C++
vs调试的时候,指定的参数已超出有效值的范围。参数名:sit ,先仔细看看错误和我的一样不一样
https://www.cnblogs.com/pei123/p/7694947.html 指定的参数已超出有效值的范围。参数名:sit ,先仔细看看错误和我的一样不一样 更新了1709就这样了,的确修复了就可以了 控制面板>程序> 网名:浩秦; 邮箱:root#landv.pw; 只要我能控制一個國家的貨幣發行,我不在乎誰制定法律。
1086 0