关于一些零碎的注意问题

1.关于scanf与printf的返回值

1. scanf 函数是有返回值的,它的返回值可以分成三种情况

     1) 正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &a, &b);
     2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入",3 4",返回0。
     3) EOF,这是在 stdio.h 里面定义的常量(通常值为-1),表示输入流已经结束。在Windows下,用户按下CTRL+Z,就表示输入结束;Linux/Unix下使用CTRL+D

2. 为什么前面 scanf 的格式串里面,%s 和 %c 中间需要空格呢?
  那是因为如果没空格的话。。。oldchar输入的就是空格了= =.

3. 顺便说一下,printf 的返回值是输出的字符数,例如,printf("1234")的返回值是4,而printf("1234\n")的返回值是5。

2.关于比赛时的 ~ scanf与scanf != EOF

EOF一般为-1,那么scanf("%d",&n)!=-1等价于~scanf("%d”,&n)

3.关于动态数组问题

int n;
scanf("%d",&n);
int a[n];//错误
//注意VC++6.0的标准是不允许定义动态数组的,不过现在的标准貌似都支持,所以这一点可以忽略

4.long long int类型

long long 类型的0表示为 0LL

5.unsigned int类型

很多STL的函数返回值为unsigned ,所以还是比较常用
使用unsigned int类型要注意
unsigned int的 0减1会变为正无穷

6.短路特性的使用及注意事项

//短路特性不能把++放在if的括号里边,否则第二个++可能无法生效
if(ans1>=flag&&ans2>=flag){
break;
ans1++,ans2++;
}

7.printf()函数输出double类型问题

printf()函数中不存在% l f
printf()输出double类型数据不能用 lf 否则会出错

8.bool类型问题

尽量不要把0和1当作false和true来用
因为如果0不小心减1变成负数就没法作为正常判断条件终止了

9.define问题

//define时千万不要重定义系统的关键字,不然后面用到的时候会报错,找错误找到自闭
#define max 1000

10.全局数组和变量

全局数组和变量定义后默认均为0

11.说说关于双重for循环的变量定义

//变量能少定义就少定义
//不要定义重名变量
//定义变量时尽量有点技术含量,不要搞一堆a,b,i,j来糊弄人
//最好不要定义成 i j,因为太难分辨了,哈哈
//如果写了i,j一定要注意不要用混了

12.%c输入字符

1.
   //能不用%c尽量不要用
   //哪怕要输入一个字符,也要定义一个字符数组str【】,输入%s,用str[0] 
   表示一个字符
2.
   int n;
   char a,b;
   scanf("%d",&n);
   scanf(" %c %c",&a,&b);//注意%c前面有一个空格哦,这样就不用吞回车

猜你喜欢

转载自www.cnblogs.com/1911087165zzx/p/11344139.html