C之易错注意点转义字符,sizeof,scanf,printf

2024-03-31 21:20

本文主要是介绍C之易错注意点转义字符,sizeof,scanf,printf,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一:转义字符

1.转义字符顾名思义就是转换原来意思的字符

2.常见的转义字符

1.特殊\b

2. 特殊\ddd和\xdd

 3.转义字符常错点----计算字符串长度

注意 :

如果出现\890,\921这些的不是属于\ddd类型的,,不是一个字符,ddd表示1~3个八进制数字

二:sizeof操作符 

1.含义:

2.使用时注意的几点

三:printf函数

1.注意点

2.常见占位符

3.限定宽度,输出部分字符串,函数返回值 

1.限定宽度

2.输出部分字符串

3.printf函数的返回值

四:scanf函数 

1.注意

2.scanf函数返回值

应用

五:小tips


接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 

前言

C语言的一些常见的知识容易混淆,不知道具体使用细节,导致做题被坑,接下来我们就将介绍这些容易出错的知识

一:转义字符

1.转义字符顾名思义就是转换原来意思的字符

2.常见的转义字符

1.特殊\b

对于退格键\b需要注意的是如果\b之后还有字符的话 ,\b之后的第一个字符会覆盖\b处前一个字符,如:

 

2. 特殊\ddd和\xdd

\ddd 如:\130表示把130这个八进制数字转换为10进制后的值88,作为ASCII码值的字符,转换过来的十进制ASCII码值范围在0~127以内

\xdd 如:\x30表示把30这个十六进制数字转换为10进制后的值48,作为ASCII码值的字符,转换过来的十进制ASCII码值范围在0~127以内

 3.转义字符常错点----计算字符串长度

对于这种题就得熟知常见的转义字符。结果为

注意 :
如果出现\890,\921这些的不是属于\ddd类型的,,不是一个字符,ddd表示1~3个八进制数字

二:sizeof操作符 

1.含义:

1.sizeof 是⼀个关键字,也是操作符, 专⻔是⽤来计算sizeof的操作符数的类型⻓度的 ,单位是字
节。

2.使用时注意的几点

1.sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。
2.sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。
3.sizeof 的计算结果是 size_t 类型的。
sizeof(long)>=sizeof(int)

可以看出sizeof内部的运算是不进行的 ,只关注数据类型

4。 sizeof 运算符的返回值,C 语⾔只规定是⽆符号整数,并没有规定具体的类型,⽽是留给
系统⾃⼰去决定, sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是
unsigned int ,也有可能是 unsigned long ,甚⾄是 unsigned long long
对应的 printf() 占位符分别是 %u %lu %llu 。这样不利于程序的可移植性。
C 语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的返
回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是
unsigned long long 。
5.当sizeof操作符的返回值与int类型的值比较是,会发生类型转换,int转换为unsigned int,如果转换前int 定义变量的值负数,就会转换为非常大的正数

三:printf函数

1.注意点

1.printf()函数运行结束后,不会在末尾添加换行,在原来位置继续打印数据,如需换行需手动添加换行符

2.常见占位符

3.限定宽度,输出部分字符串,函数返回值 

1.限定宽度

从这个例子看出,

%5d 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。大于等于5位的话正常输出
输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空
格,可以在占位符的 % 的后⾯插⼊⼀个 - 号即%-5d。

 对于浮点数的限定宽度

对于浮点数默认小数点后打印六位,宽度为9的话,1.200000总共是8位(小数点也算一位),再前补一空格,如限定位数的话,也依然遵循此规则

2.输出部分字符串

占位符 %.5s 表⽰只输出字符串“hello world”的前5个字符,即“hello”。 

3.printf函数的返回值

从官方文档查询可知,printf函数的返回值是正确读取字符的个数,读取出现错误的话,将调ferror函数

 

我们对这个程序进行分析得

 

四:scanf函数 

1.注意

scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等。
scanf() 处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存
进⾏解读。
scanf函数不能处理在输入字符串中有空格的,有空格的应该用gets函数来读取
scanf() 读取⽤⼾输⼊时, %d 占位符会忽略起⾸的空格
%c 不忽略空⽩字符,总是返
回当前第⼀个字符,⽆论该字符是否为空格
如果要强制跳过字符前的空⽩字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表
⽰跳过零个或多个空⽩字符
占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个⾮空⽩
字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。

2.scanf函数返回值

 

scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。
如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或
者遇到读取到⽂件结尾,则返回常量 EOF。
应用

用于在OJ中连续输入数据,完成多组输入,如:

可以用上面两种中的随便一种

如要停止继续输入可以输三次ctrl+z使读取到文件末尾 

五:小tips

我们经常会遇到这样的问题,在输入测试用例的时候,需要1,2,3这样输入,而有时就会1 2 3这样输入导致错误,这里提供一个小技巧可以忽略数据间的规定字符---->赋值忽略符

只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。
如:int a=0,b=0,c=0;
scanf(“%d%*c%d%*c%d”,&a,&b,&c)

这篇关于C之易错注意点转义字符,sizeof,scanf,printf的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865380

相关文章

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

SpringMVC入参绑定特别注意

1.直接在controller中定义一个变量,但是此种传输方式有一个限制就是参数名和请求中的参数名必须保持一致,否则失效。 @RequestMapping("test2")@ResponseBodypublic DBHackResponse<UserInfoVo> test2(String id , String name){UserInfoVo userInfoVo = new UserInf

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在

js基础需要注意的点

1 js中单引号和双引号都能创建字符串,但是html的元素属性规定必须用双引号,所以js优先用单引号定义字符串。

用ajax json给后台action传数据要注意的问题

必须要有get和set方法   1 action中定义bean变量,注意写get和set方法 2 js中写ajax方法,传json类型数据 3 配置action在struts2中

平时工作学习重要注意的问题

总体原则:抓住重点,条理清晰,可回溯,过程都清楚。 1 要有问题跟踪表,有什么问题,怎么解决的,解决方案。 2 要有常用操作的手册,比如怎么连sqlplus,一些常用的信息,保存好,备查。

HDU2523(论scanf的重要性)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2523 解题思路: 先把a数组排个序,然后把| xi - xj |的所有组合值求出来,把b数组在排个序。这时候要考虑出现1、1、1、2、2、3这种相邻两个一样的情况,开一个vis标记数组把相邻的数进行合并,这样就可以顺利取到第k大的值。 特别说明,论scanf和printf的重要性,用cin

二分猜数易错的地方

今天做简单的二分猜数问题,while循环总是跳不出去,搞了好久才弄好了。。。好几次都这样,总结一下吧 while(left <= right){int mid = (left+right)/2;if(ok(mid)) left = mid+1,ans = mid;//记录结果,要不然跳不出循环,视题目而定,ans也可以写在下面else right = mid-1;}

ACM比赛中如何加速c++的输入输出?如何使cin速度与scanf速度相当?什么是最快的输入输出方法?

在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中

c语言(scanf函数)

scanf函数注意事项: 1.输入字符 #include <stdio.h>int main(){char c;printf("请输入一个字符:\n");scanf("%c",&c);printf("输入的是%c\n",c);return 0;} 2.一次性输入多个数值,并且以某些符号隔开,应加以提示。( 注意:数值之间的分隔符是任意的,不一定要用中划线-,可以是逗号、空格、