首页 > 代码库 > C语言相关及算法题常见错误总结

C语言相关及算法题常见错误总结

之前写程序总结的一些东西,比较私人化,记录在这。后面继续补充。


1.不要再太过纠结于输入了。比如怎样想结束就结束,或用字符a来匹配int形来结束。搞来搞去好复杂。可以很简单地用输入数量限制。

2.命名时如果有114 abc和114 abcd,可能编译114 abcd后运行的是114 abc。因为空格。

3.数组千万不要开小了。特别是在读取文件时,而你又不知道长度最大为多少,不要想当然地,很容易把数组开小了。。错误难查。。

4.读文件时,fscanf太容易出错了,还是用getc比较好,特别是需要一行一行处理时,fscanf太容易太容易出错了。。。

5.用fgets时需要定义MAXLINE,尽量定义大些吧,不要出现的小错误不易查出来。特别是有中文时,你以为很短,其实长度很大。。不要想当然的。。

6.用string时,在#include<string>后,还要using namespace std;

7.RE的原因有:

模0、除0;(除0、模0,是否因为除数因没成功读入而为0)

数组开小溢出了;

数组越界(注意结果的范围,而不仅仅是看输入数据的范围,数组确实开够了?)

死循环一直等待读入(比如你是getchar()!=‘\n‘而输入最后一行没有换行而是EOF结尾可能程序就崩溃了)

程序卡在等待输入

使用块作用域变量的指针(比如将一个if语句里创建的变量,取址加入结构体指针队列,参见UVa 532的用指针错误版本)

8.Output Limit Exceeded是指如果输入某一组数据,你的程序返回的结果是一直输出某个结果,死循环输出的那种。TLE除了死循环就是算法问题。

9.TLE的原因有:

没有结束机制。比如你一个while(1)循环里,有个break的条件,但那个条件一直得不到满足,比如是个bool变量,你传入函数的不是指针而得不到修改,一直不能满足条件跳出循环。(参见UVa 699) 

算法时间复杂度太高,无限递归,无限while。

10.WA的时候构造大数据测试看看。另外,看有没有把freopen注释掉。

C语言相关及算法题常见错误总结