关于scanf()函数的细节

【Halcon】双目立体视觉引导机械手有序抓取,案例分享 本文介绍了一个基于双目视觉的工件定位与抓取系统。该系统使用两个工业相机组成双目视觉系统,通过标定获取相机参数,采用模板匹配算法识别任意摆放且可能交叠的工件。重点阐述了三维坐标获取方法,特别是通过Z方向高度实现有序抓取的策略。文章详细说明了系统搭建、双目标定、模板创建等关键步骤,并展示了特征点匹配和定位结果。该案例为初学者和开发者提供了双目视觉系统的基本实现参考,展示了机器视觉与机械手协同工作的典型应用场景。 阅读详情

scanf()是C中用的较多的一个输入函数。

说明:此文章中的[ space ] [tab]  [enter] 分别表示键盘上的空格键,tab键,enter键


基本用法:scanf("转换说明符",变量地址);

   转换说明符的作用有2个,一:占位,与后面的变量地址一一对应。二:表明输入数据的形式


scanf()的返回值

  scanf也是有返回值的。当输入并读取正确,他就是返回成功读取数据项目的个数,若全部输入读取错误,就返回0。遇到文件结尾,则返回EOF。

  例子1:

#include <stdio.h>
int main(void)
{
	int a,b,c;
	
	c=scanf("%d   %d",&a,&b);
	printf("a=%d b=%d\n",a,b);
	printf("%d\n",c);
	
	return 0;
}
输入:1  [space]  2

输出:
a=1   b=2
2

//////////////////////////////////////////////

输入:m  [space] 2        //错误的输入

输出:
a=垃圾值   b=垃圾值
0



输入数字

1)输入一个整数

  scanf( " %d " , &a );           //注意:不要在%d后面加\n

  工作特点:此时,scanf( ) 会扫描输入的字符。如果我们在输入的数据前输入一些空白符(空格,Tab,Enter等,这些是光标的一些行为,不会显示出字符),它会跳过这些空白符,因为转换说明符%d告诉它:输入的数据是一个整数。然后继续扫描。直到它遇到一个非空白字符,他就会读取(当然,不正确的输入也会读取,比如:m或者@或者~等等,但是+  - 正负号不是错误输入,scanf会正确读取)。当它扫描到一个数字,比如2,scanf就会读取,同时检查后面的数据是否也是数字,若是,读取,在检查下一位,如此重复。若下一位不是数字,比如空白符,或者符号,字母,就结束读取,它认为整数读取结束了。

例子:

  scanf( " %d " , &a );

   输入:[space]  [enter]   [tab]  2

   输出:2

 /////////////////////////////////////////////////////////////////////////////////

   输入:m2                   (错误输入)

   输出:一个不可预测的垃圾数字


/////////////////////////////////////////////////

   输入:+2                 

   输出:2

  ////////////////////////////////////////////

   输入:-2

   输出:-2

////////////////////////////////////////

   输入:2m23

   输出:2

//////////////////////////////////////////

   输入:2 [space]  [enter]   [tab]  

   输出:2


2)输入多个整数(只讨论正确输入)

   scanf(" %d , %d ", &a , &b );

   输入:23,22     

   

//////////////////////////////////////////

  scanf(" %d    %d ", &a , &b );(中间有空格)

   输入:  23     22                   (中间有空格)

//////////////////////////////////////////


3)scanf的一些修饰符

   scanf(" %3d " , &a );  //作用:取输入数字的前3个赋值给a,其余的跳过

   输入:123456

   输出:123

 //////////////////////////////////////////

  scanf(" % * 3 d % d ", & a ); //跳过前3个数字,把后面的数字赋值给a

  输入:123456

  输出:456


4)输入浮点数

  原理同上,此时  -  +  .  这3个符号都是合法符,正确输入即可。



输入一个字符  (2种情况)

  情况1:scanf("%c",&ch1)

  情况2:scanf("   %c",&ch1)     //%c前有一个空格


   区别:第1种情况是读取输入的第一个字符(包括非空白字符,如空格,tab。。。。),后者是读取第一个非空白字符。

  例子:

  情况1:scanf("%c",&ch1)

    输入:[space] a

    输出:[space]         //在显示器上看不到字符,仅仅是一个空格

 

  情况2:scanf("   %c",&ch1)  

    输入:[space] a

    输出:a



例子:


{
	int c;
	char ch1,ch2;
	
	c=scanf("%c  %c",&ch1,&ch2);  //第7行//第一个%c前无空格,第二个%c前有空格
	printf("ch1:%c   ch2:%c\n",ch1,ch2);
	printf("%d\n",c);
	
	return 0;
}
输入:[space] [space]  a

输出:
ch1:    ch2:a  
2

解析:结果是:ch1得到空格,ch2得到字母a。很明显:第一个[space] 空格符赋值给了ch1,而紧接着的第二个[space] 空格符没有赋值给ch2,而是把a赋值给了ch2。

//////////////////////////////////////////////////////////////////////////////////

改1第7行代码:c=scanf("%c%c",&ch1,&ch2);//去掉了第2个%c前的空格

输入:[space][space] a

输出:

ch1:    ch2:  
2

解析:此时,ch1和ch2都成功得到空格符,丢弃了字符a,因为char类型只能是一个字符。

/////////////////////////////////////////////////////////////////////////////////////

改2第7行代码:c=scanf("  %c  %c",&ch1,&ch2);    //2个%c前都有空格

输入:[space] [tab]  a  [tab] [tab] [space]  b

输出:

ch1:a  ch2: b
2

解析:这种情况下,无论空白符和非空白符怎么组合输入,都只取输入的前2个非空白符非别赋值给ch1和ch2。因为2个%c前都有空格,所以他们都只接受非空白符。



输入一个字符串

       scanf("%s",str1);

       输入:[space] [tab] =3.1#415n9

       输出:=3.1#415n9

///////////////////////////////////////////////////////////

       scanf("%s",str1);

       输入:[space] [tab] 3.1#415n9 [space] 123

       输出:3.1#415n9   (后面的123没有读取)

%s 告诉scanf读取的是一个字符串,开始遇到的空白符会跳过,当第二次遇到空白符,就结束字符串的读取,所以scanf读取字符串时不解释空格,这种情况可以用gets解决。


YOLO+OpenClaw缺陷检测智能体 | 低代码工业质检自动化方案 | 含YOLO模型训练/智能体集成/任务全流程,支持离线日报/预警/趋势分析,解决实时性瓶颈问题(下篇) 某PCB板制造商需要对生产线上的PCB板进行缺陷检测,主要检测划痕、凹坑、污渍和裂纹等缺陷。原有人工检测方式效率仅为200件/小时,漏检率达5%,且检测人员长期工作易疲劳。 阅读详情

相关推荐

XGBoost调参新姿势:Bayesian优化实战指南(附完整代码)

本文详细介绍了如何使用Bayesian优化方法高效调优XGBoost模型参数。通过解析Bayesian优化核心原理和XGBoost关键参数,提供完整的实战代码示例,帮助读者掌握这一智能调参技术,显著提升模型性能。文章特别适合机器学习工程师和数据科学家阅读。

weixin_42536058的博客 367

scanf函数详解(保姆级讲解)以及使用时需注意的细节

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。(下图是来自cplusplus.com中对scanf函数的解释)

2201_75998194的博客 2万+

CH341的I2C流模式(StreamI2C)到底怎么用?从EEPROM读写到自定义设备,一篇讲清参数配置逻辑

本文详细解析了CH341的I2C流模式(StreamI2C)的使用方法,从EEPROM读写到自定义设备的参数配置逻辑。通过深入分析I2C协议基础、StreamI2C参数映射关系及典型设备配置示例,帮助开发者快速掌握StreamI2C的应用技巧,解决实际开发中的常见问题。

weixin_30932215的博客 452

【C语言指南】scanf()函数详解

scanf()函数是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。对于scanf()函数的掌握是使用C语言的一门必修课

倔强的石头的博客 1万+

Uncertainty-Aware Mean Teacher(UA-MT)

本文提出了一种新的基于不确定性的半监督学习框架(UA-MT),通过额外利用未标记的数据从3D MR图像中分割左心房。具体地说,本文建立了一个教师模型和一个学生模型,学生模型通过最小化标注数据上的分割监督损失和所有输入数据上的与教师模型预测输出的一致性损失进行优化。如果没有未标记输入中的注释,教师模型的预测目标可能不可靠且有噪声。:在估计不确定性 U 的指导下,我们过滤掉相对不可靠**(高不确定性),整个体积** U 的不确定性**是 {u} ∈ RH×W ×D。过滤掉高不确定性的,也就是熵大于某个值的。

Alexa_的博客 1871

CTF-MISC:BUUCTF练习汇总(1-25题,不包括签到题)

解题思路:该题比较基础,wireshark打开过滤HTTP流量包,追踪HTTP流后可以看到base64密文,解密后得到jpg图片,打开图片即可看到flag,在线OCR识别即可提取出flag值。解题思路:zip压缩包解压需要密码,图片中的盲文为解压的密码,解压后得到MP3音频文件,内容为典型的摩斯密码;解题思路:由题目可以为LSB隐写,使用StegSolve打开图片查看最低有效位得到PNG信息,另存为图片后发现是二维码,扫描后即可得到flag。对应摩斯电码为:-.-. - …-. .-- .–. . …

燕麦葡萄干的博客 1万+

C语言——scanf()函数的具体详解

C primer plus中遇见的scanf问题记录

LYY_WJL的博客 3万+

Matlab 2023b 科研党必备:MOSEK 10.1.25 安装与配置全记录(附License过期解决方案)

本文详细介绍了在Matlab 2023b中安装与配置MOSEK 10.1.25的全过程,特别针对科研用户提供学术许可申请、证书文件部署及环境集成的实用指南。文章还包含常见问题解决方案和性能调优建议,帮助用户高效完成优化计算任务。

weixin_30598225的博客 171

scanf()函数(详细)C语言基础

scanf() 处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。上⾯⽰例中,⽤⼾分成四⾏输⼊,得到的结果与⼀⾏输⼊是完全⼀样的。每次按下回⻋键以后,scanf() 就会开始解读,如果第⼀⾏匹配第⼀个占位符,那么下次按下回⻋键时,就会从第⼆个占。scanf中是用,隔开的,输入数据时以要用,隔开,但为了避免用户输入数据不规范,导致scanf解析数据失败,

2301_81224771的博客 4562

彻底解决Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

renkai721的专栏 24万+

Python赋能,洞见先机:构建基于异步爬虫与流处理的实时舆情监控系统

我们将从核心概念入手,逐步搭建一个集。.option("es.resource", "public-opinion-%s" % time.strftime("%Y-%m-%d")) \ # 按日期分索引。| 数据采集层 |----->| 消息队列层 |----->| 流处理与分析层 |----->| 存储与可视化层 |:使用Spark Streaming的状态操作或Flink的CEP库,检测更复杂的模式,如“某关键词的负面舆情在1小时内激增500%”。

2201_76125261的博客 434

scanf()函数的详解以及使用时需要注意的一些细节-C语言基础

这篇文章要探讨的是“scanf()函数的详解以及使用时需要注意的一些细节”。涉及scanf()函数的应用和需要注意的问题。属于C语言基础篇(持续更新)。 scanf()(函数原型:int scanf(const char *restrict format, …)) 这个函数原型不太好看出个所以然来,可以理解为(int scanf(“第一部分”, 第二部分)) 一般用法: int n = 0...

因为自己也淋过雨,所以想给别人撑把伞。 6234

【全网首发】2026华为OD双机位C卷 机考真题题库含考点说明以及在线OJ (Java)

如果你收到的是双机位C卷考试通知,需要针对性地调整备考策略。自2025年11月19日起,华为OD机试已正式从双机位A卷切换至。复杂度明显提升,需要组合多个算法点。题面相对简单,直接考查编程基本功。考查问题分析、算法选择和优化能力。通常为1-2个核心算法点的应用。

算法大师! 169

【C语言】字符串输入gets()、scanf()函数的使用细节

字符串输入使用gets()、scanf()函数过程中,容易忘记的两个知识点。

xiuxingzhe01的博客 254

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

关于scanf()函数的一个小细节

如果是接收字符串的转换说明%s,它中间加了个空格,会导致scanf()函数认为这应该在控制台写一个‘%’加上‘ ’再加上‘s’,而不是原来应该有的转换说明%s的作用,同时因为你写的“ s”字符串在没有第二个%s转换说明的情况下,使得ch数组并没有在scanf()函数的调用下存入数据,也就是说,ch数组因为最开始定义的时候未初始化使得每个数组元素都是垃圾值,那么在通过scanf()函数这段代码,因没有相应的%s而存入失败,使得数组ch的每个数组元素还是垃圾值,那么垃圾值通过字符集就转化为‘烫’这个字符了。

m0_73892303的博客 146

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

带你分析C语言代码背后的细节(二): scanf_s()函数与scanf()函数

如果你和我一样用的是VS2019,那么你需要知道scanf()函数的名称更改为scanf_s()了,如果你用scanf(),编译时C就会向你发出错误提醒,点击错误码C4996会跳转到帮助网页,在那里会有详尽的解释。下图是官网对名称修改的解释,注意到一句话“如果需要使用现有函数以实现可移植性,则可以关闭这些警告”,根据官网提供的办法之一,我在第一行插入代码: #pragma warning(disable : 4996) 依旧使用scanf()名称,编译运行顺利。到这里,如果你是像我一样的初学者,你可能

kaifan_ye的博客 839

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

关于一次c语言格式控制函数scanf()的一个小细节

**scanf()是格式化控制输入函数 ** 我们知道,格式化控制输入,关键是控制这个词 来,我们来看一个程序图 可以看到,最后第二次循环之后变量1的位置变成了“空格”或换行 ,在c语言中,这个被称为空白符,当我们使用这个scanf从键盘输入数据的时候,会有两个键会被输入 一个是我们输入的,一个是回车,当我们输入一个字符时,按下回车,会把我们输入的字符输出,然而这个回车键不会消失,而是被存储在缓冲...

qq_42943680的博客 238

c语言中scanf()函数细节问题

int a,b,c; scanf("%d,%d,%d",&a,&b,&c); printf("%d,%d,%d\n",a,b,c); char d,e; printf("继续输入...\n"); scanf("%c",&d); printf("%c\n",d); printf("输出完毕..."); 下面是执行结果: 上面的代

qq_36791648的博客 392

C语言程序与设计中Scanf()函数输出细节补充。

Scanf();表达式的值为int,表示成功读入的变量个数。 #include<iostream> main(){ int a,b; printf("%d",scanf("%d%d",&a,&b)); } scanf()的值为EOF(即-1)则说明输入数据已经结束了。 window系统,不停输入两个数并敲回车,则不停的输出他们的和,直到在单独一行输入Ctrl+Z 然后回车程序就会结束。(os或linux系统下是Ctrl+D或Ctrl+W) main(){

小陈的博客 289

scanf()函数、getchar()函数

scanf()函数:通过键盘给程序中的变量赋值 格式: #include<stdio.h> scanf(输入控制符,参数) 代码: # include <stdio.h> int main(void) { int i, j; printf("请输入两个值,中间以空格分隔:"); scanf("%d%d", &i, &j); p...

qq_40443457的博客 903

C语言中printf()函数和scanf()函数的基础功能使用

printf()函数的基本功能就是在屏幕上打印一些内容,例如:字符、字符串、数字信息等。 scanf()函数的基本功能就是给变量输入值。最简单的printf()函数和scanf()函数代码:int main() int main(){ printf("holle word"); { int i = 0; scanf("%d",&i);

YxxxL_striving的博客 1000

详解C语言输入缓冲机制,分析scanf()和getchar()函数用法

本文主要讲述C语言中scanf()、getchar()等输入读取函数的行为细节,特别是标准I/O的3种缓冲方式对函数行为的影响。最后还分析了scanf()格式化输入函数一些特殊用法。

Leon的博客 1311

C语言中getchar()、gets()和scanf()的特点以及scanf产生的多余回车符问题

第一件事就是建议大家少用gets函数。 我遇到的这个问题实在是C语言新手比较容易遇到的一个问题。是关于get()和getchar()这两个函数的。大家都知道,gets()函数作用是输入字符串,而getchar()是输入单个字符。但在一个小程序中,我发现了它们两个一些别的用法。 因为源文件的代码很长,所以只打上源文件中涉及到这个问题的一个函数: 函数是想要输入十名同学的学号和姓名。 刚开始,我认为在gets函数前有加了一个getchar函数是多余的。于是我便删除了开头的那段

daijingxin的博客 1万+

C/C++ 关于scanf()的代码调试

在做C练习实例的时候,我发现VS2019使用scanf()这个函数时会报错 C4996 scanf返回值被忽略是因为没有使用scanf的返回值 可以有以下两种解决方案 1、定义一个临时变量接受scanf函数的返回值 int ret = scanf("%d",m) 2、强制忽略返回值 (void)scanf("%d",m) C6031 在高版本的 Visual Studio 编译器中,scanf ...

AtomQQ_2022313691的博客 1117

scanf函数%c前为什么加空格才能正常输出

#include <stdio.h> int main (void) { int i ; char ch ; scanf("%d",&i) ; scanf(" %c",&ch) ; //这行的%C前有个空格 printf("i = %d\nch = %c\n", i, ch) ; /* 输入100 y 后的输出结果: i = 100 ch = y */ return 0 ; } 前面有空格,表示读一字符前要跳过 前面 所有 的空..

weixin_44640697的博客 2109

scanf( )函数与gets函数使用细节介绍

C语言中有关 scanf( ) 函数和 gets( ) 函数以及getchar( )函数的一些使用细节 学过C语言的人都知道 scanf( ) 函数和 gets( ) 函数以及 getchar( ) 函数的作用,今天我们就来讲讲具体的细节,直接上代码: 1. scanf( )函数用来读取字符串: #include<stdio.h> #include<string.h> int main() { char str1[100]; char str2[100]; char ch1;

中华神威的博客 1224
上一篇: 关于漏洞
下一篇: 个人关于指针的理解
love1code
博客等级 码龄12年 19粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值