在使用自定义函数时,出现无法解析外部符号和外部命令的错误,求解决方法

问题描述:

图片说明

求解答!!!!!

错误挺多的,这个报错应该是返回值问题吧。
这里你用到了double和int两种数据类型,double是双精度浮点型,占用空间是八个字节,int是整型,占用两个字节。简单理解的话double用来存比较精
确或者大一点的小数也行,他们的存储规则是不一样的。
每个函数都是有返回类型的,写在函数的最开头也就是函数名前面,当调用函数的时候会通过函数末尾的return语句把一个值返回出来,可以用来赋值或者
做判断语句等。return语句执行时会返回一个值并跳出这个函数(return下面有别的语句的话不会再执行了),而return后面的那个值的数据类型必须与函
数开头写的返回值类型是抑制的(不然计算机很傻的,它可搞不清楚你到底想返回什么类型的数据,不同类型存储规则又不一样,操作方法也不同)。返回
值类型可以写成“void”,就是空类型,也就是说不返回数据,这样就不用写return(准确地说应该是不可以写return语句)。

所以第一个问题就是add方法的返回值类型和return里面写的不一样,return的是int,返回时类型写的是double;
第二个问题是y=add(p,q)小于10这个语句,判断符号的优先级是最高的,所以先进行判断,判断结果在C语言中只有0,1的区分,因此y得到的赋值是0或1,
这个语句本身实质上是个赋值语句,而这个赋值语句对整个程序本身没有任何意义,赋值语句不知道能不能做判断,如果能的话结果肯定为真,因此这个
for循环要不会报错,要不就是死循环;
第三个就是main方法标注的返回值类型为int但是没有return语句。
第四个问题就是,double要占用八个字节,int只占用两个字节,而你的程序中用的值都是很小的整数,用了很多double非常浪费存储空间。
所以改一下:

#include <stdio.h>

int add(int p, int q)
{
    return p + q;
}

void main() {
    int p, q;
    p = q = 0;
    for (; add(p, q) < 10; p++)
    {
        printf("%d ", p);
    }
}

所有数据类型改成int,节省存储空间,函数返回值相同,main方法的返回值改为void(因为它不需要返回数据),把多余的y去掉。

看错误是main中调用了无法识别的add。
猜测 add 函数定义为double, return的时候为int

#include <stdio.h>

double add(double p, double q)
{
    return p + q;
}

int main() {
    double y, p, q;
    y = p = q = 0;
    for (; y = add(p, q) < 10; p++)
    {
        printf("%lf ", p);
    }
}

0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000

问题解决的话,请点下采纳