JuffJiang 发表于 2018-12-24 21:26:05

c语言 写一个c函数 请帮帮我啊


◆当输入一个参数时,计算它的平方
◆当输入两个参数时,计算它们的平方的和
◆当输入参数超过三个时,输入错误信息,并返回
写一个 c语言 函数

怎么判断输入了多少个参数啊?
我自己 通过判断scanf的返回值为多少 写了一下
但是行不通啊
那位大神能帮帮我啊???????????
谢谢啦。。。。。。。。。

JuffJiang 发表于 2018-12-24 21:27:00

谁能帮帮我啊?

JuffJiang 发表于 2018-12-24 21:27:35

没人吗?
帮我看看呗

JuffJiang 发表于 2018-12-24 21:28:07

{:10_269:}{:10_269:}{:10_269:}{:10_269:}{:10_269:}{:10_269:}{:10_269:}{:10_269:}{:10_269:}{:10_269:}{:10_269:}{:10_269:}

爱学习的懒懒君 发表于 2018-12-24 22:54:47

C语言有一种长度不确定的参数,形式为 "...",如printf函数就使用了这个参数,因为输出参数不会确定,使用方法好像是定义好的宏,具体怎么用你可以百度看看

TOP_LK 发表于 2018-12-24 22:57:34

可以使用默认参数

Croper 发表于 2018-12-25 00:25:39

TOP_LK 发表于 2018-12-24 22:57
可以使用默认参数


C好像没法使用默认参数。。

Croper 发表于 2018-12-25 00:47:03

本帖最后由 Croper 于 2018-12-25 00:59 编辑

试了下,用宏也没法搞定

这是我能想出来最接近的答案了
int func(int num,...)
{
        va_list list;
        int a,i;
        int sum = 0;
        //if (num > 2) printf("参数过多");
        va_start(list, num);
        for (i = 0; i < num; i++)
        {
                a = va_arg(list, int);
                sum += a * a;
        }
        va_end(list);
        return sum;
}
但是还是得先输入你想要出输入的参数的个数,比如3的平方,需要写成func(1,3),而2和3的平方和,需要写成func(2,2,3);

话说你要这功能直接换c++好了,重载或者默认参数哪一个都能简单快捷地解决你的问题


嗯。。另外。。你想要大于两个参数报错的话把那行注释去掉就行

刘邦 发表于 2018-12-25 01:45:50

c函数写出来了,main函数有点问题,希望对你有帮助
#include<stdio.h>
#include<stdarg.h>
#define NUM 2
void func(int n, ...);
void func(int n, ...)
{
        int sum=0;
        int a;
        va_list vap;
        va_start(vap,n);
        if(n>2)
        {
                printf("输入信息错误!\n");
        }
        else
        {
                for(int i=0;i<2;i++)
                {
                        a=va_arg(vap,int);
                        sum+=a*a;
                }
                va_end(vap);
                printf("计算结果为%d\n",sum);
        }
}
int main(void)
{
        int a;
        //int b,c;
        for(int i=0;i<NUM;i++)
        {
                printf("请输入第%d个数字:",i+1);
                scanf("%d",&a);
        }
        //b=a;
        //c=a;
        //func(NUM,b,c);
        func(NUM,a,a);
        return 0;
}

rencaixiaomeng 发表于 2018-12-25 05:05:30

#include <stdio.h>

int func(int num,...);
int main(void)
{
        func(5);
        func(15, 20);
        func(25, 30, 30);
        func(35, 20, 30, 40);//测试用,参数随意填写
        return 0;
}

int func(int num,...)
{
        int*i, *j, k=0;
        i = j = &num;

       
        j -= 1;
        j = *j;
        k = *j;
        k &= 0x00ff0000;
        k = (k >> 16)/sizeof(int);//这几句通过取得函数返回地址,进而取得函数返回后下一条指令的指令字节码,放入K中,由于下一条指令是平衡堆栈,指令中有调用函数时推入栈的参数的字节数,取出该数除以int占用的字节就是参数的数量
       
        if (k > 2)
        {
                printf("参数过多!\n");
        }
        else if (k == 2)
        {
                printf("%d\n", (*i) * (*i) + (*(i + 1))* (*(i + 1)));
        }
        else if (k == 1)
        {
                printf("%d\n", num*num);
        }

        return 0;
}

以上代码只能在32位编译器测试成功
页: [1]
查看完整版本: c语言 写一个c函数 请帮帮我啊