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语言程序设计基础 数据类型: 数据类型定义与格式化调用一致(涉及强制转换(涉及void任意型)) 整型与字符型之间存在对应关系(涉及ascii表及isxxxxx类库函数) 除for()内的i,n或Arr的下标外均可将int换为long long 运算过程中可能会溢出int甚至long long(涉及取模运算) 注意有时long long不宜直接进行非整除得double? 注意有时需要unsigned int或unsigned long long型 注意区分1(默认int),1LL,1ULL(常见于位运算>>或<<中) 指针根据指向对象亦有类型;变量地址必为int整型 函数根据返回的情况具有数据类型,注意函数参数所需类型 int,long long,double型分别对应绝对值函数abs,labs,fabs 数据结构: 条件语句: if-else或if-else if-else,避免并列if的出现 注意:()后无分号;运算符及其优先级(括号);非0即真 选择语句: switch-case-break-default 注意break的对跃出当前case的作用 循环语句: for/while/do-while(L.不定组输入);break;continue;goto 注意:for中i的首末及增量;while死循环;do-while至少执行一次 注意:i++和++i的差异及初值经循环后的意义;注意for()后的分号 注意:多级循环注意下标检索的区分;提前break或continue可优化 注意:break仅跳出一层循环,可考虑sign或flag等额外标记处理之 注意:goto A;A:后不能直接连定义语句,而需分号空语句单独占一行 注意:时间复杂度(数据的预处理及检索;不要反复调用strlen等函数) 输入输出: 输入基础: scanf(不支持空格/换行),fgets(不支持换行符),getchar(支持字符) scanf:需对非字符串型取地址&传入;字符(匹配)或字符串前消空白 scanf:可返回正确输入的个数;遇EOF(cntrl^Z)失败 fgets:可能会占用str余下位置填充’\n’;len(str)=strlen(str)-1;删换行 getchar:getchar()可消去”%c””%s”scanf输入前的空白字符 多组输入: 若仅需实现提问次数的限制,直接while(n--)即可,否则建议for()处理 可考虑数组存储 不定输入: while(scanf(“%d%d”)==2)//正常输入则继续 while((c=getchar())!EOF&&c!=’\n’)//非终止或换行则继续 while(fgets(str,sizeof(str),stdin!=NULL)//非空则继续至换行 while(1){终止条件} 可考虑数组存储 输出基础: printf(注意添加换行);puts(自动换行) printf格式化输出(符号;前导;宽度;精度);注意特殊转义’\’;%% 一次输入可直接对应一次输出,或采用数组存储一次性输入输出 常量变量: 常量可采用宏定义:EPS;MAX_N且:acos(-1)=π;exp(1)=e str[]=”Hello”为不可修改的字符串常量;拓展:指针常量与常量指针 变量分全局变量和局部变量;函数调用时全局变量不在形参列表中 变量必须先定义再调用;定义和调用需要数据类型的对应 浮精度 浮数的二进制存储方式 浮数比较:EPS精度控制;fabs(a-b)<=EPS判断相等? /截断;floor下取整;ceil上取整;round四舍五入;int(x+0.5)强制转换? 模拟浮数:整数部分先输出,小数部分借助.x输出,得形式上的浮数 超高精度的四则运算及阶乘等:涉及数组与进位模拟(可能需四舍五入) 位运算 基本运算:&(位与),|(位或),^(异或),~(取反),>>(右移),<<(左移) 基础取位操作:(x>>i)&1可取x第i位的二进制数 基础置位操作:(x>>i)&0可置x第i位数位为0;|1则可置之为1 快速计算与奇偶判断:快速幂;二的乘方与幂次判断;奇偶数判断 数组 字符串 指针 库函数 函数 递归
最新发布
12-03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值