scanf返回值

一,scanf函数返回值

没错,scanf有返回值。
上代码,发现一下规律

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int m;
    int i,j;
    printf("输入\n");
    m = scanf("%d%d", &i,&j);
    printf("输出\n");
    printf("%d\n",m);
    return 0;
}

在这里插入图片描述
在这里插入图片描述
scanf返回值就是所输入的数据与格式字符串中匹配次数第一次输入‘1’和‘r’,与’%d’和’%d’只匹配了一次,输出匹配次数1第二次输入’r’和’r’,与’%d’和’%d’一次都没有匹配,输出匹配次数0.


二,小用法

思考一下,如果我做一个进行加法的小程序,让用户输入两个数字。用scanf(“%d%d”,&a,&b)实现输入,但是如果用户输入了,字符,标点符号这些不是数字的东西应该怎么办呢?
下面代码实现,提醒用户非法输入的作用。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int m = 0;
	do
	{
		printf("请分别输入a,b\n");
		m = scanf("%d%d", &a, &b);
		while (getchar() != '\n');
	} while (m != 2 && printf("在乱输入什么啊,重新来\n"));
	c = a + b;
	printf("%d", c);
}

在这里插入图片描述
解释一下。

while (getchar() != '\n');

由于没有输入整数,所以,会有字符串或者标点符号这些留在滞留区,这一步是消除他们。

 while (m != 2 && printf("在乱输入什么啊,重新来\n"));

为什么printf函数可以放在逻辑运算符后面??printf有返回值哦。具体请看这篇博客
printf返回值博客链接
只要没有老老实实输入两个整数,返回值就不是2,就会一直循环,每一次循环还会打印“在乱输入什么啊,重新来\n”

三,getchar()停不下来??

这个小技巧可能很多人都用,就是通过getchar()来让程序暂停一会。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	char arr[20];
	scanf("%s", arr);
	getchar();
}

但是,结果就是,当你输入了一串字符串之后,程序立刻结束了。为什么呢?涉及到C语言原理的知识了。我们想一想,一串字符串,编译器怎么知道哪里是字符串的结束呢
1.加一个整形参数记录字符串长度
2.通过特定字符标识字符串的结束。
C语言采用第二种,通过’\n’标识字符串的结束。也就是我们敲的回车。于是乎,我们输入abc,实际上在滞留区保存了abc\n,\n就是最后的回车。scanf只输入了abc。\n依然在滞留区,所以getchar就把\n输入。然后程序就结束了。
解决办法:两个getchar()。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	char arr[20];
	scanf("%s", arr);
	getchar();
	getchar();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值