scanf函数返回值占位符详解,%*,%[]的应用

前言

scanf函数可以说是我们一开始就会接触的函数了,但在最近复习时我又找到而来一些之前不甚了解或是块要遗忘的知识,特作此篇。

一.返回值

我们之前提到了scanf返回值被忽略的问题:

scanf函数返回值被忽略-CSDN博客

那么scanf的返回值到底是什么呢

这个是他的声明

这个则是返回值的描述

翻译

scanf返回成功转换和分配的字段数;返回值不包括已读取但未分配的字段。返回值为0表示没有分配任何字段。如果在第一次尝试读取字符时发生错误,或者遇到文件结束字符或字符串结束字符,返回值为EOF。

由此我们可以知道,他返回的就是实际读取并成功赋值的变量数量,举个例子

第一种情况

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
	int a;
	char b;
	char* c[5];
printf("%d",scanf("%d %c %s", &a, &b, c));

	return 0;
}

可以看到,返回值是3

第二种情况:

没有读取任何项:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
	int a;
printf("%d",scanf("%d", &a));

	return 0;
}

输入a,%d占位符不会读取进去,并且程序会立即终止,所以返回值是1

第三种情况:第一次尝试读取字符时发生错误,或者遇到文件结束字符

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
	int a;
printf("%d",scanf("%d", &a));

	return 0;
}

我们只需要连着按三次ctrl+z即可,至于为什么是三次,这是vs的一个小问题,搬来正常情况是按一次就行的。,EOF是个宏定义,它就是-1

二占位符

ok,解决了返回值的问题之后我们再来看看占位符,

先来几个基本的

1.%d   对应整形            %c对应字符               %s对应字符串                     %f单精度浮点数         %lf双精度浮点数

然后是与之相关的:

2.%hd  对应十进制的short int           %ho对应八进制的short int        %hx对应十六进制的short int

%hu  对应unsigned short int

3.%ld 十进制long int    %lo  八进制long int      %lx   十六进制long int       %lu  unsigned long int

4.%lld十进制的long long int         %llo八进制的long long int            %llx 十六进制的long long  int

%llu  long long unsigned int

5.%o 八进制int         %x十六进制int            %zd    size_t

然后是少见的

%g:6个有效数字的浮点数,整数部分超过刘伟后就会自定转化为科学计数法,且指数部分为小写e

%G:与%g相同,但指数部分为大写G。

%e:使用科学计数法的附带念书,指数部分e小写,

%E:与%e一样,但指数部分E大写。

%le 科学计数法表示的long double

ok,接下来才是今天的主角%*与%[].

1.%*

他是一个赋值忽略符,该占位符不会将解析而后的值放入对应变量中,而是直接丢弃

举例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
	int a;
scanf("%*d%d", &a);
printf("%d", a);
	return 0;
}

可以发现,我们先输入的3不见了,而后输入的2则被用于给a赋值

2.%[]

[]内指定一组字符,遇到不在集合中的字符时读取结束,这里就要引入“^”了,在这里^表示”非“,

举例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
	char a[10];
scanf("%[^\n]", a);
printf("%s", a);
	return 0;
}

可以发现,此次读取是到回车才停下来的,[^\n]表示的也正是非回车,基于此我们可以更为便捷的调用scanf函数。

ok今天关于scanf函数的分享就到这里了,觉得有用的话就点个免费的赞支持一下吧。

  • 35
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值