c语言错误集合

一、数据类型

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);