关于一些零碎的注意问题

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前面有一个空格哦,这样就不用吞回车

 13.结构体的初始化

struct node
{
    int x,y;
    node(){x=0,y=0;}
};
struct node
{
    int x,y;
    node(){x=0,y=0;}
    node(int xx,int yy)//构造函数,不定义对象就可以作为参数
   {
         x=xx,y=yy;
   } 
};
queue<node>q;
q.push(node(1,2));//直接调用构造函数
//而不需 node se;  se.x=1,se.y=2; 然后q.push(se);q.push(se);

14.无穷大定义

#define inf 0x3f3f3f3f

 

转载于:https://www.cnblogs.com/1911087165zzx/p/11344139.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值