scanf区别%f和%lf。
严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。
要确保可移植性,就要坚持使用%f。
scanf函数在输入整型数据时不能接受空格、制表符Tab、回车等;
gets函数能够接受空格、制表符Tab和回车等;
string不能接受cin带空格的字符串;
cin不能接受以空格为字符;
getchar()接受以空格,回车为字符;
getline()会读取缓存区的换行符导致直接换行。
所以,getline()函数之前的换行符,要用getchar()吸收。
getline()函数之后的换行符会被读取,并换行,即不用考虑
获取二进制中最右边的一(权重最小的一)lowbit( x ) = x & ( -x )
std::ios::sync_with_stdio(false);
这句语句是用来取消cin的同步,什么叫同步呢?就是iostream的缓冲跟stdio的同步。如果你已经在头文件上用了using namespace std;那么就可以去掉前面的std::了。取消后就cin就不能和scanf,sscanf, getchar, fgets之类同时用了,否则就可能会导致输出和预期的不一样。
取消同步的目的,是为了让cin不超时,另外cout的时候尽量少用endl,换用”\n”,也是防止超时的方法。
当然,尽量用scanf,printf就不用考虑这种因为缓冲的超时了。
cin.tie(NULL)
用此方法解绑 cin 和 scanf
语句 a[i]=i++;是否能正常执行呢?答案很显然是不能的。因为子表达式 i++有一个副作用,就是它会改变 i的值,由于 i在同一个表达式的其他地方被引用,这将导致一个无法判断的结果,无从判断 a[i]中的 i是旧值还是新值。在使用中应该避免此类现象的出现。
C++不支持函数返回局部变量的地址
局部变量在栈中,函数结束内存即被释放,此时返回无效值
解决方法:将局部变量声明为static,生存在堆中