C-1 简单数据类型转换, scanf缓冲区, 逗号表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C-1 简单数据类型转换, scanf缓冲区, 逗号表达式相关的知识,希望对你有一定的参考价值。

 

关于类型转换:

1.int

如果是超出了int的范围,会溢出

如果超出了太多,报错

如果是一个小数,只会截取整数部分, 不会四舍五入

2.float

如果是一个double类型的小数,double→float

如果是一个int类型的整数,int→float

3.double

如果是一个float,float→double

如果是一个int,int→double

4.char

自动转换的顺序是: char → int → float → double 

 

scanf缓冲区问题

在接收输入的时候,scanf会把所有输入存在缓冲区,依次接收,而不会按照语句中的各个类型进行接收,尤其是数字型数据和字符行数据混合输入的时候,很容易把空格和回车存到字符变量中。

解决办法:

1.定义一个专门的字符串数组或者变量来接收多余的空格和回车

2.利用rewind(stdin);清空缓冲区

 

面试题1

两数交换不定义temp变量的方法
1.
1 num1 = num1 + num2;
2 num2 = num1 - num2;
3 num1 = num1 - num2;

 

2.
1 num1 = num1 ^ num2;
2 num2 = num1 ^ num2;
3 num1 = num1 ^ num2;

 

逗号表达式

逗号表达式的目的,并不是想要前面表达式的结果
如:
     int i = 0, j = 1, k = 2;
 
或者只是想要逗号前面的表达式执行, 然后要最后一个表达式的结果
这时候和分开写没有什么区别, 只是单纯的减少了代码行数;
 
前面的表达式只要求其执行,并不关心其结果
关心的只是前面的变化完以后,最后一个表达式的结果
 

复合赋值运算符:

int num += 10 → int num = num + 10;  减法, 乘法, 除法同理;
 

自增自减运算

++,   - -,
  1. 无论是放在左还是右, 其最后都会+1, 或者-1;
  2. 在左: 先将自身的值取出来, 作为整个表达式的结果, 然后再自增(减)
  3. 在右: 先将自增(减), 然后再将自身的值取出来作为表达式的结果

以上是关于C-1 简单数据类型转换, scanf缓冲区, 逗号表达式的主要内容,如果未能解决你的问题,请参考以下文章

用scanf同时输入不同类型的成员数据常常会出现意想不到的情况,这是为啥呢?

输入输出

使用 scanf_s 时出现缓冲区溢出问题

scanf和cin的区别

scanf()中清除输入缓冲区的几种方法归纳

C语言基础01