对于C语言学习中易错点的一些总结(一)

对于使用DEV C过程中曾经出现的一些问题的总结(一):

I/O printf和scanf函数输入输出时一些问题:

1:&,*的使用:

学习c语言之初,经常被强调在<stdio.h>下的scanf函数使用时要使用取地址符&,而对于数组类型,数组名前则不需要加&。如下:

/* 正确的输入输出: /在这里插入图片描述
出现这种情况的原因是C语言本身决定的,因为对于scanf函数输入过程是将数据存入相应的存储地址中,因此对任何数据都是对其取地址赋值的。而对于字符串而言,其本身的字符名就表示该字符串的首地址,即s=&s[0]是等价的因此不需要加取地址符&。
当printf函数输出时,对于字符串s,如果按%c输出字符串中某个字符时,可以利用数组元素直接输出,同时也可以利用指针的方法:比如
s即为字符串的首字符。(由此也可见,&,*为一对互逆运算)

  当不添加取地址符&时,DEV C不会提示编译错误,但运行过程将不会通过:

在这里插入图片描述

   同时,当输入多个类型的数据的时候,&应加在相对应的需要添加取地址符的类型之前,一个&不能通用于之后的所有数据(*因为曾经有过投机取巧的想
   法*),否则同样将出现上述运行出错的情况:

在这入图片描述

2:对于输入输出的位数的控制:

当希望通过c语言输出位数不同的函数,或使输出数据更加整齐时,通常需要使用到对输出结果的位数进行控制。
对于printf函数,输出时可以通过以下方式改变输出位数:

 当输出按%5d时意味着,输出时按5位依次输出最后一位数与左端相隔五个字符距离,位数不够按空格补齐(当单个数a位数超过五位时,则数据不会覆盖,
 a,b按形式一次输出,不出现空格效果)

在这里插入图片描述
输出结果如下:
在这里插入图片描述在这里插入图片描述

类似的,当数字5发生改变时意味着输出所控制的位数发生改变,当其为负值时,即方向改变,整个数字向左靠拢:

在这里插入图片描述
以上方法同样适用于字符串的输出。

对于浮点数,可以采用小数的形式来使输出结果整数部分和小数部分的位数,如下图(正数部分为三位,小数部分为两位):
在这里插入图片描述在这里插入图片描述
实际情况下,整数部分不做限制,而小数部分会通过四舍五入严格按位数输出。

那么对于scanf函数是否有同样的方式呢?

scanf函数在输入过程中是不能企图通过上述方式来控制位数的,但其同样有类似的方式来表示其他含义:
通过一个例子进行说明:
在这里插入图片描述在这里插入图片描述
可见scanf函数添加数字表示按严格按位数录入数字,当数字超过所取位数时,舍弃多余的数据。%*3d在此处也可看出,表示录取数据时跳过的位数。当位数不足时,输出数据为0。

3:输入过程的一个不易发现错误:

以前经常出现的一个错误:
在这里插入图片描述
DEV C对此不会提示编译错误,但输入之后不显示结果。
输入过程不需要通过转义字符来进行换行操作,因为scanf本身在遇空格或回车时便停止。

猜你喜欢

转载自blog.csdn.net/weixin_43361652/article/details/85367723