C语言数据类型和变量注意事项

        各位友友大家好,我是来自某中游211的控制科学与工程专业的研一学生,近期在学习c语言和c++,目标是建立起扎实的编程基础,能够独立开发一些小型项目,并逐步深入了解更高级的编程概念和技术。

         我想通过在线的编程培训进行系统的学习,同时在csdn上分享一些自己近期总结的知识点盲区来不断提升自己,欢迎大家前来学习和指正。

 C语言数据类型和变量注意事项:

1.字符型:[signed] char//有符号的      ; unsigned char//无符号的

2.布尔类型使用要包含头文件<stdbool.h>    可以定义为_Bool flag = true或者bool flag = true;

3.sizeof(类型)或者sizeof 表达式,单位是字节,其中sizeof后边的表达式不真实参与运算,由表达式的类型得出大小,

例如

{

    short s = 2;
    int b = 3;
    printf("%zd\n", sizeof s);//2
    printf("%zd\n", sizeof(s = b + 1));//2
    printf("%d\n", s);//2,说明s的值未变

}

sizeof返回值类型可能是%u(无符号整型),%lu(无符号长整型),%llu(无符号长长整型);因此,将size_t作为sizeof的返回值,对应这三种返回值类型,用%zd表示。

C语言规定:sizeof(long)>=size(int)

4.int 等同于 signed int ,但是char不等同于signed char,可能是signed char 也可能受unsigned char.

5.全局变量为在大括号外面定义的变量,局部变量为在大括号里面定义的变量,并且局部变量只能在自己所在的局部范围内使用。如果全局变量和局部变量重名,优先使用局部变量。没有初始化的局部变量,里面放的是随机值。

6.局部变量放在内存的栈区,全局变量放在静态区

7.算术操作符是双目操作符,/ 用来完成除法,如果除号两端是整数,执行的是整数除法,结果也是整数,C语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。如果希望得到浮点数的结果,两个运算数至少有一个是浮点数。

8.%  求模运算,只能用于整数,返回两个整数相除的余数。求模结果的正负号与被除数的正负号保持一致,如11%-5=1,-11%-5=-1。

9.c=a=b+3//连续赋值,从右往左依此复制。

10.前置++:++a//先+1后使用                后置++:a++//先使用后+1

11.强制类型转换,(int)3.14   表示将3.14强制类型转换为int类型,只取整数部分

12.printf()不会自动在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行;如果printf()有n个占位符,对应有n+1个参数。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。

        printf()可以限定占位符的最小宽度,%5d表示这个占位符的宽度至少为5位。如果不满5位,  对应的值的前面会添加空格,默认右对齐;%-5d表示左对齐,不满5位在后面添加空格。

例:

#include<stdio.h>
int main()
{
	printf("%5d\n", 123);//输出"  123"
	printf("%-5d\n", 123);//输出"123  "  


	return 0;
}

        对于小数,这个限定符会限制所有数字的最小显示宽度,%12f表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位, 所以 123.45 输出结果的头部会添加2个空格。

int main()
{
	printf("%12f\n", 123.45);//输出"  123.450000"  


	return 0;
}
        %+d 可以确保输出的数值,总是带有正负号。
        %.2f可以限定小数点后面只保留两位。
         最小宽度和小数位数这两个限定值,可以用  代替,通过 printf() 的参数传⼊。     如:
printf("%*.*f", 6, 2, 0.5);//输出"  0.50"     等同于printf("%6.2f\n", 0.5)
          %.[m]s 指定输出 的长度,其中 [m] 代表⼀个数字,表示所要输出的长度, 占位符 %.5s 表⽰只输出字符串“hello world”的前5个字符,即“hello”。

 
printf("%.5s\n", "hello world");

13.scanf()传入的是地址,不是值

  标准输入一般是指键盘,标准输出一般是指屏幕

一次从键盘读入多个变量的例子如下:
scanf("%d%d%f%f",&a,&b,&c,&d);
scanf() 处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等。
占位符%d读取到123停下来, 第⼆次调用 scanf() 时,就会从上⼀次停止解读的地方,继续往下读取。这⼀次读取的首字符 ,由于对应的占位符是 %f ,会读取到 .45e12 ,这是采用科学计数法的浮点数格式。后面的 # 不属于浮点数的有效字符,所以会停在这里。
scanf() 的返回值是⼀个整数,表示成功读取的变量个数。 如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到文件结尾,则返回常量 EOF(-1)。按ctrl+z可以提前结束。
      %c 不忽略空白字符,总是返 回当前第⼀个字符,无论该字符是否为空格。 如果要强制跳过字符前的空白字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表示 跳过零个或多个空白字符。
     %s 不能简单地等同于字符串。它的规则是,从当前第⼀个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止。 scanf() 不适合读取可能包含空格的字符串,比如书名或歌曲名。另外, scanf() 遇到 %s 占位 符,会在字符串变量末尾存储⼀个空字符 \0
     scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串时,很可能会超过数组的边界,导致预想不到的结果。为了防⽌这种情况,使用 %s 占位符时,应该指定 读入字符串的最长长度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表示读取字符串的最大长度,后面的字符将被丢弃。
  
int main()
{
	char ch[11];
	scanf("%10s", ch); /*ch 是⼀个⻓度为11的字符数组, 
                       scanf() 的占位符 % 10s 表⽰最多读取用户输⼊
		              的10个字符,后⾯的字符将被丢弃,这样就不会有数组溢出的⻛险了。*/
	return 0;
}
scanf() 提供了⼀个赋值忽略符  * 。 只要把 * 加在任何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃。
int main()
{
	int year = 0;
	int month = 0;
	int day = 0;
	scanf("%d%*c%d%*c%d", &year, &month, &day);
	return 0;
}

  • 40
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值