一、数据类型
long long与int不要混用
用int就全int,一但用long long就全long long
错误示例
#include<stdio.h>
int main()
{
int a=1000000;
int b=1000000;
printf("%lld",a*b);
/*
或者是
int a=1000000;
int b=1000000;
long long c=a*b;
printf("%lld",c);
*/
return 0;
}
结果是3567587328,并不是预期值
正确做法
#include<stdio.h>
int main()
{
long long a=1000000;
long long b=1000000;
printf("%lld",a*b);
/*
或者是
long long a=1000000;
long long b=1000000;
long long c=a*b;
printf("%lld",c);
*/
return 0;
}
结果是预期值
牵扯到可能会出现小数的算数必须用double,这是一小时debug给的教训,血的教训!!!
尝试找出该程序的bug
#include<math.h>
int isinround(int x1,int x2,int y1,int y2,int r)
{
int ret=0;
int num;
num=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
if(num>r)
{
ret=0;
}
else
{
ret=1;
}
return ret;
}
答案是
#include<math.h>
int isinround(int x1,int x2,int y1,int y2,int r)
{
int ret=0;
double num; //int改成double
num=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); //sqrt平方根函数会产生小数,一定要用double!!!!
if(num>r)
{
ret=0;
}
else
{
ret=1;
}
return ret;
}
栈内存不足,炸了
***str开到main函数外面(静态),不会炸;开到main函数里面(自动,栈),内存不足,炸了。
#include<stdio.h>
#include<string.h>
char str[10000000];
int main()
{
// char str[10000000];
gets(str);