C语言易错知识点:scanf函数

scanf在C语言学习中比较常用,但因为其涉及屏幕缓冲区导致有的时候会调入陷阱,下面分享一下常见的需要注意的事项:

1.输入末尾带有回车'\n'

当我们输入数据后,最后按下回车时,屏幕缓冲区的末尾都会含有这个字符

scanf的返回值是成功读取的变量个数,正常情况下这个数量等于占位符的数量

2.读取时的匹配规则

scanf会根据占位符的类型到缓冲区去取相应的数据,其中%c什么都能取,包括空格等符号

如果在%c前加了空格,就会跳过这些空格读取第一个字符

其中因为%c前面没有空格,所以a把空格读走了,引发后续错误

%s跳过空格开始读,遇到空格停止,这里很容易被坑。要读取空格,建议使用gets

当读到占位符不匹配的类型时会自动停止读取,由下一个继续

如果当前匹配不成功,会直接中断读取,后续的占位符不会起到作用

3.回车换行是'\n',回车不换行是'\r'

我们输入数据后敲的回车都是\n,相当于光标换行并回到起始位置,而\r只是回到起始位置,如果进行后续操作,会进行覆盖

4.返回值EOF和0的区别

EOF特指读取错误(不好验证)和文件末尾,一般在读取文件时用它来判定

在控制台中,如果用EOF来作为循环条件的话,那么程序会被卡住,因为scanf会一直等我们输入,这个时候用0作为返回值的循环条件更好,因为下一个循环如果读不到想要的值,scanf的返回值就是0,这个时候循环就结束了。

在循环读取时,scanf会跳过每次按的\n(回车),所以这里不会因为\n不匹配%d而中断

5.用getchar清空缓冲区

用getchar写一个循环,可以帮助我们清除\n,防止后续程序出错

这里看到,不清空的话,%c会直接读走\n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web安全攻防措施

2024最新Web安全攻防教程资料PPT大合集(143份).zip 输入验证和过滤:对用户输入进行严格的验证和过滤,以防止SQL注入、跨站脚本攻击(XSS)等。例如,对特殊字符进行转义处理,限制输入…

代码书写在if __name__ == ‘__main__‘前后的区别

if __name__ __main__这个东西,所有见过python代码的程序猿们一定都不会陌生。为方便理解,有人直接把它等同于java中的主函数。我们今天不是为了来探讨它和Java主函数的异同的(因为我已经忘了Java主函数的细节了,也懒得再回顾…&…

leetcode110.平衡二叉树

之前没有通过的样例 return语句只写了一个 return abs(l-r)<1缺少了 isBalanced(root->left)&&isBalanced(root->right);补上就好了 class Solution { public:bool isBalanced(TreeNode* root) {if(!root){return true;}int lgetHeight(root->left);i…

(学习日记)2024.03.11:UCOSIII第十三节:使用优先级的流程 (持续更新)

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

vulntarget-k - 内网渗透

标签 xxl-job rce Spring-Cloud-CVE-2022-22947 nacos auth bypass iox 靶机难度比较简单&#xff0c;都是用用 exp 就好了 拓扑图 网卡设置 首先需要使用虚拟网络编辑器&#xff0c;增加 VMnet1、VMnet2、VMnet3 对三张网卡设置子网 IP VMnet1 192.168.100.0 VMnet2 1…

EM算法详解

EM(Expectation-Maximum)算法也称期望最大化算法,曾入选“数据挖掘十大算法”中,可见EM算法在机器学习、数据挖掘中的影响力。EM算法是最常见的隐变量估计方法,在机器学习中有极为广泛的用途,例如常被用来学习高斯混合模型(Gaussian mixture model,简称GMM)的参数;隐…

SIP-7043 20W SIP网络有源吸顶喇叭

SIP-7043 20W SIP网络有源吸顶喇叭 一、描述 18123651365微信 声卡喊话IP喇叭&#xff0c;IP网络吸顶天花喇叭 SIP-7043VP是我司的一款SIP网络有源吸顶喇叭&#xff0c;具有10/100M以太网接口&#xff0c;内置有一个高品质扬声器&#xff0c;将网络音源通过自带的功放和喇叭…

jpg格式图片怎么生成二维码?扫码看图在线制作方法

多张jpg格式的图片如何做成二维码展示&#xff1f;jpg是现在最常用的一种图片格式&#xff0c;不管是拍摄的照片、设计图片或是其他类型的图片基本上都是这种格式。那么如何将jpg格式的图片放到二维码中展示呢&#xff1f;通过下面的文章内容来分享一下图片制作二维码在线的技巧…

scrcpy远程投屏控制Android

下载 下载后解压压缩包scrcpy-win64-v2.4.zip scrcpy连接手机 1. 有线连接 - 手机开启开发者选项&#xff0c;并开启USB调试&#xff0c;连接电脑&#xff0c;华为手机示例解压scrcpy&#xff0c;在scrcpy目录下打开终端&#xff0c;&#xff08;或添加scrcpy路径为环境变…

前端面试题 ===> 【HTML】

HTML面试题总结 1. 对 HTML 语义化的理解 去掉或者丢失样式的时候能够让页面呈现出清晰的结构&#xff1b;代码结构清晰&#xff0c;方便团队的管理和维护&#xff0c;并且语义化更具有可读性&#xff0c;减少差异化&#xff1b;提升用户体验&#xff1b; 例如&#xff1a;ti…

【数组】41. 缺失的第一个正数【困难】

缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1 输入&#xff1a;nums [1,2,0]输出&#xff1a;3 示例 2 输入&#xff1a;nums [3,4,-1,…

同态滤波算法详解

同态滤波是一种用于增强图像的方法&#xff0c;特别适用于去除图像中的照明不均和阴影。该算法基于照射反射模型&#xff0c;将图像分解为两个分量&#xff1a;照射分量&#xff08;illumination component&#xff09;和反射分量&#xff08;reflection component&#xff09;…

精品基于Uniapp+ssm停车场预约缴费微信小程序的设计与实现

《[含文档PPT源码等]精品微信小程序基于Uniappssm停车场微信小程序的设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;ssm 安卓框架&…

Python打印输出Linux中最常用的linux命令之示例

一、Linux中的~/.bash_history文件说明&#xff1a; 该文件保存了linux系统中运行过的命令的历史。使用该文件来获取命令的列表&#xff0c;并统计命令的执行次数。统计时&#xff0c;只统计命令的名称&#xff0c;以不同参数调用相同的命令也视为同一命令。 二、示例代码&am…

csp模拟题(201604-2,俄罗斯方块模拟下坠)

题目 问题描述 俄罗斯方块是俄罗斯人阿列克谢帕基特诺夫发明的一款休闲游戏。   游戏在一个15行10列的方格图上进行&#xff0c;方格图上的每一个格子可能已经放置了方块&#xff0c;或者没有放置方块。每一轮&#xff0c;都会有一个新的由4个小方块组成的板块从方格图的上方…

一文掌握Python控制语句操作及实例详解

在 Python 中,控制语句是用于流程控制的重要工具,可以帮助我们根据不同的条件执行不同的代码块。本文将带你快速掌握 Python 中的控制语句操作,并通过实际例子让你更好地理解。 1. 条件控制语句:if-elif-else Python中的条件判断主要依赖于if,elif(else if)和else语句…

应急响应实战笔记03权限维持篇(6)

0x00 前言 在渗透测试中&#xff0c;有三个非常经典的渗透测试框架----Metasploit、Empire、Cobalt Strike。 那么&#xff0c;通过漏洞获取到目标主机权限后&#xff0c;如何利用框架获得持久性权限呢&#xff1f; 0x01 MSF权限维持 使用MSF维持权限的前提是先获得一个met…

蓝桥集训之正则问题

蓝桥集训之正则问题 核心思想&#xff1a;递归 归结到一棵树 向上返回x数量 #include<iostream>#include<cstring>using namespace std;int k;string str;int dfs(){int res0; //记录x数量while(k<str.size()){if(str[k] (){k ; //跳过左括号res dfs();k …

【C#】【SAP2000】OAPI文档案例详解

创建一个简单的结构模型,运行分析,提取结果,并将结果与手算值进行比较。 以下是详细的代码解析: 开头部分是一些using语句,引用了必要的命名空间,特别是SAP2000v1, 它包含了SAP2000 API的类和方法。 在Main方法中,首先定义了一些变量,用于控制是启动一个新的SAP2000实例还是附…

【JVM】Java虚拟机调优 配置启动参数

一、配置方式 options - JVM启动参数。 配置多个参数的时候&#xff0c;参数之间使用空格分隔 参数命名&#xff1a; 常见为 -参数名 参数赋值&#xff1a; 常见为 -参数名参数值 | -参数名:参数值 二、内存参数 -Xms:初始堆大小&#xff0c;JVM启动的时候&#xff0c;给定…