scanf的基础用法就不用介绍了,值得一提的是用VS会有一个scanf_s函数,

#include<stdio.h>
//以下是Senky的代码
int main()
{int num = 0;scanf_s("%d", &num, sizeof(num));return 0;//编辑于2022/09/16}

第三个参数是值将缓冲区读入多少个字节,因为传统的scanf是不会检查越界的,这样的函数更加的安全(在VS2022中,第三个参数是不用自己传入的,编译器会自动检查)

下面来看看Scanf()的一些很好用的特殊用法:

一、和while()的奇妙配合

先来看看基础用法:

控制读入的位数

#include<stdio.h>
//以下是Senky的代码
int main()
{char a[10];char* num=a;scanf_s("%5s", num, sizeof(num));printf("%s", a);return 0;//编辑于2022/09/16}

限制位数

那么和while配合:

#include<stdio.h>
//以下是Senky的代码
int main()
{char str[100];while (~scanf_s("%5s", str, sizeof(str))){printf("%s\n", str);}return 0;//编辑于2022/09/16
}

结果

能够循环读入5个字符 ,直到缓冲区为空,余位用空格填补

(一)scanf、printf是有返回值的:

1) 正整数,表示正确输入参数的个数。
2) 0,表示用户的输入不匹配,无法正确输入任何值,返回0。
3) EOF,这是在 <stdio.h >里面定义的常量(通常值为-1),表示输入流已经结束。

因此scanf能够写在while里面判断输入是否合法

printf()也是有返回值:

#include<stdio.h>
//以下是Senky的代码
int main()
{int a = 5;if (a == printf("1234\n")){printf("printf函数返回值是输出的字符个数(包括\\n)");}return 0;//编辑于2022/09/16
}

二、匹配特定的字符串

scanf匹配特定字符串的格式:%[特定字符串]

#include<stdio.h>
//以下是Senky的代码
int main()
{int a[100];scanf("%[senky]", a);printf("%s", a);return 0;//编辑于2022/09/16
}

遇到第一个不匹配的字符串元素就会结束 

[ ]内无空格

[ ]内有空格

三、过滤特定的字符串

scanf过滤特定字符串的格式:%[^特定字符串](加了个^符号)

#include<stdio.h>
//以下是Senky的代码
int main()
{int a[100];char* p = a;scanf("%[^a-zA-Z]", p);printf("%s", p);return 0;//编辑于2022/09/16
}

只读入大小写字母以外的字符

 因此scanf("%[^\n]")可以代替gets( )TA们都是读取一行

四、丢弃过滤的字符

既然能够过滤字符,那么过滤的字符我们肯定是不想要的,那么如何丢弃呢:

scanf()允许把读取到的数据直接丢弃,不往变量中存放,具体方法就是在%后面加一个 * 号

#include<stdio.h>
//以下是Senky的代码
int main()
{char a[20]="Senky";//初始化char* p = a;//指针指向数组ascanf("%*[^ a-zA-Z]");printf("此时还未输入字符串的a[20]:%s\n", p);scanf("%[ a-zA-Z]", a);printf("丢弃过滤字符后    的a[20]:%s\n", p);return 0;//编辑于2022/09/16
}

第十行以后才将缓冲区的值写入a(注意看左下角的变量监视):

五 、综合应用

输入一长串字符串,一次读入8个字符并且只将大小写字母、空格输出:

#include<stdio.h>
//以下是Senky的代码
int main()
{int i = 0;char str[80]="Senky";//初始化scanf("%*[^ a-zA-Z]");while (scanf("%8[ a-zA-Z]", str), str[i++]){//循环读入8位只含有空格、大小写字母的字符并输出printf("%s\n", str);scanf("%*[^ a-zA-Z]");}return 0;//编辑于2022/09/16
}

这句while(scanf)就是来控制循环输入输出的语句,一次读入8个字符(空格、大小写字母)

while (scanf("%8[ a-zA-Z]", str))

本博客初衷是自我学习、精进代码,若有不足之处还请多多指正

C语言——Scanf()的实用、高级用法相关推荐

  1. scanf family API 高级用法

    sscanf是一个很好用的函数,利用它可以从字符串中取出整数.浮点数和字符串等等.它的使用方法简单,特别对于整数和浮点数来说.但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧. 1. ...

  2. C语言_函数指针高级用法

    什么是函数指针? 函数是计算机程序中一段可执行代码的封装,当程序运行时函数会被加载到内存布局中的代码段位置,这段代码会有一段内存空间,有内存空间就会有地址,这段内存空间的首地址,就是函数的地址 每当我 ...

  3. C语言 —— 你不得不知道的 scanf 的高级用法

    如果你想让自己的输入更加炫酷.更加个性化.更加安全,那么还需要学习 scanf() 的高级用法,这才是大神和菜鸟的分水岭. 好了,言归正传,我们分三个方面讲解 scanf() 的高级用法. 1) 指定 ...

  4. Linux基础和c语言的高级用法

    Linux基础 基础命令 与文件相关的: mkdir:创建一个目录文件 touch:创建一个普通文件 rmdir:删除一个空的目录文件 cd:+目录名:进入该目录文件 +路径:进入该路径下 ls:显示 ...

  5. 牛客网循环输入输出测试——C语言scanf和printf用法

    在实际的编程中需要自己写出完整的程序,预留好输入的接口,使用while循环接收多个测试用例,C语言在输出时printf要用换行"\n". 字符串输入输出问题见博客:牛客网字符/字符 ...

  6. 合并多个结果集 SQL语言的高级用法

    GPS平台.网站建设.软件开发.系统运维,找森大网络科技! https://cnsendnet.taobao.com 来自森大科技官方博客 http://www.cnsendblog.com/inde ...

  7. c语言scanf s用法,C语言scanf与scanf_s

    C语言scanf与scanf_s0 我打编译器是microsoft visual studio 2005,我的源程序如下,注意注释的地方,就是scan函数中的scanf_s函数,程序运行正常,但是当输 ...

  8. c语言scanf函数用法完全攻略,C语言scanf函数用法完全攻略

    本节介绍输入函数 scanf 的用法.scanf 和 printf 一样,非常重要,而且用得非常多,所以一定要掌握. 概述 scanf 的功能用一句话来概括就是"通过键盘给程序中的变量赋值& ...

  9. Android组件化实战五: APT的高级用法JavaPoet

    Android 组件化实战一: Gradle基础语法 Android 组件化实战二: 项目部署 Android组件化实战三: 模块之间的交互 Android组件化实战四: APT的介绍与使用 Andr ...

最新文章

  1. IBM发布全新合作伙伴计划 共赢认知商业时代
  2. java增加 删除 修改表格_Java实现单链表的创建、添加、修改、删除
  3. 音乐会的等待-单调栈
  4. WINCE--编译环境一二三(转摘)
  5. 【python初识】列表与函数模块
  6. 2021-03-20 数据挖掘算法—SVM算法 python
  7. 2008服务器维护,Windows 2008 R2 服务器维护
  8. 直接说,我要怎样才能做到年薪 50 万?
  9. 关于vs2008 SP1中CMFCToolBar的一些事儿
  10. PHP在线预览word文档的功能
  11. 时区缩写与UTC(GMT)时差对照表
  12. SQLite数据库中的.db-shm文件和.db-wal文件
  13. java操作word宏
  14. 击中击不中变换的作用理解
  15. 【已解决】RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
  16. PowerQuery操作分类3
  17. 小波变换 完美通俗解读【转载
  18. 日常报错记录Could not find com.android.tools.build:gradle:3.2.1. variant: debug/0 from output dir Failure
  19. Hadoop完全分布式集群总结
  20. Visual Studio 2010各个版本比较

热门文章

  1. 关于女性开发者的 8 大误解
  2. vue nuxt npm 调用百度地图
  3. shaderGraph练习(三)------ 渐变效果
  4. python 中的最大堆和最小堆(heapq库)
  5. G65SC802 与 G65SC816 指令集(按字母顺序排列) (转)
  6. android viewHolder static 静态
  7. Windows10常用设置
  8. Windows识别USB设备过程
  9. python第三天作业
  10. /proc路径下有些什么?