返回值的类型详解

本文详细介绍了C语言中return的用法,包括在不同类型的函数中如何使用。此外,还重点讨论了printf和scanf函数的返回值,指出printf的返回值为实际输出的字符数,而scanf的返回值是成功读取的数据个数。通过实例代码解析了这两个函数返回值的含义和应用场景。
摘要由CSDN通过智能技术生成

1.return的用法

函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过 return 语句返回。(这句话摘录C语言中文网)


 

1.1 return的一般表现形式:

return (表达式);

或者

return 表达式;


 

1.2 return在函数中的应用:

1.2.1 在无返回值类型函数中的应用:(即void类型)

void fun ()
{
  printf ("hello world");
}

int main()
{
  fun();
  return 0;
)

在这段代码中,一旦建立了void类型函数,就不能再接受其返回值了,它也没有其返回值让你接收,比如下面这句就是错误的;

int a = fun();

这里就是非法使用void 类型函数。


1.2.2 在需要返回值类型函数中的应用:

这里我们用一段简单的比较大小函数来看看return的一些应用。

int Max(int a, int b)
{
	if (a > b)
	{
		return a;//当a>b时候返回a
	}
	else
	{
		return b;//当b>a或者相等时候返回b
	}
}
int main()
{
	int a = 3;//初始化a赋值为3
	int b = 4;//初始化b赋值为4
	int max = Max(a, b);//建立一个函数来比较a,b的大小
	printf("%d", max);
	return 0;
}

       这里我们看到在一个函数体中,return 语句可以多个存在,但是当我们执行到第一个return语句时程序就不会继续向后面执行。

       由此我们可以得到,return语句具有强制结束函数执行的作用;这里需要知道是,return语句是提前结束函数的运行的唯一办法!

        1.当return语句后面跟数据的时候,这时会将这个数据返回到函数体外面

        2.当return语句后面什么都没有的时候,这时具有强制结束函数的的作用(若是你并不要需要函数返回值时,并不建议使用return语句,为了使程序有良好的可读性并减少出错, 凡不要求返回值的函数都应定义为 void 类型。


2.printf的返回值

     C语言printf函数的返回值是printf实际控制输出的字符数

     这里我们说一下会被很多我们初学者忽略的一个东西 printf的返回值,我们都清楚printf的用法但很多都不知道原来printf也有返回值。这里我们用一段代码来看;

int main()
{
	int a = 3;//初始化a赋值为3
	printf("%d",printf("%d\n",a));
	return 0;
}

这里我们得到的答案是:

3

2

下面我们来分析一下为什么是这个答案:

1. 这段代码中我们先执行的是括号里面的printf语句,因为我们先把3赋值给a,所以打印出来3;因为有/n转行符所以到下一行;

2.这里2的由来就是第一个printf语句的返回值,返回值就是括号里面的printf语句里面的字符个数,比如:这里'3'  '/n' 这里有二个字符,所以返回值就是2;

由此我们可以得到,printf的返回值就是输出的字符数量!


3.scanf 的返回值

scanf 函数的返回值反映的是按照指定的格式符正确读入的数据的个数。 如果输入数据与指定格式不符,则会产生输入错误。 遇到输入错误,scanf函数会立即终止,返回已经成功读取的数据的个数。

同上,scanf的返回值也是被大家所忽略的,闲话少说,我们直接上代码;

int main()
{
	int a = 0;
	int b = scanf("%d", &a);
	printf("%d",b);
	return 0;
}

这里我们用整形变量b来接收scanf的返回值,当我们进行以下不同的输入情况进行判断:

3

1

1.当我们输入3的时候,printf打印出的结果是1

e

2.当我们输入字符e的时候,printf打印出的结果是0 

进行到这里的时候,我们改变b的变量类型:

int main()
{
	char a = 0;
	int b = scanf("%c", &a);
	printf("%d",b);
	return 0;
}

当我们将a的类型改成char类型的时候我们在输入之前的二个数据

3

 这里再输入3时得到的答案是1

e

1

这里输入e的值得到的也是1

 这里我们就会出现疑问了,为什么在int类型中我们输入e时,会打印出0呢?

下面我们再做一个实验就知道了;

int main()
{
    int a = 0;
    int c = 0;
    int b = scanf("%d %d", &a, &c);
    printf("%d", b);
    return 0;
}

 这次我们利用二个变量,a变量和c变量,再用c变量来接收scanf的返回值;

32  e

1

这次我们输入32和e时,得到的打印结果为1;原来当我们输入32时候scanf可以接收整形输入与之匹配但是当我们输入e这个字符变量时,scanf是接收不了的与指定格式不符则显示错误,就会终止,最后返回与之匹配的输入个数。


 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C-Sakura

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值