《谈C语言编程常遇到的问题及解决方法文档.pdf》由会员分享,可在线阅读,更多相关《谈C语言编程常遇到的问题及解决方法文档.pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、程序调试中的常见问题及解决法1、CE(Compile Error)编译错误其实很多时候通过返回的错误信息就能找出错误。缺失符号,如下图 第句Error表在“printf”前少了个分号,第句Error表在“return”前少了个分号。通常在错误的上找缺失的分号。如,根据代码和上图的信息,很容易判断错误在哪。缺失参数如这样:就会有这样的错误信息返回:Error too few arguments to function void f(int)说明我们在使函数时给予的参数过少。如果使了 STL,并且是 STL 相关语句 CE,那么错误信息可能很复杂。但是不要怕,错误可能并不是多么复杂。所以下说个so
2、rt常见的问题。int main()int sas/here;printf(printf(,a 7);if(1)a 0=1/here;return 0;void f(int a).int main()f();return 0;然后就CE 了 且错误信息辣么多QAQ 还会跳出来串代码:看不懂啊QAQ 不过没关系,我们知道错误是这个:if(*_i*_first)啥意思呢?想想sort是来什么的?排序,对吧。我们的a是个结构体,包含着c,v两个数。于是就得出结论:程序不知道按什么来排序了。怎么办呢?写cmp函数。如果想按c排序,就这样:#include#includeusing namespace
3、std;struct A int v,c;a 15;int main()for(int i=1;i=10;i+)scanf(scanf(,&ai);sort(a+1,a+11);template void _insertion_sort(_RandomAccessIterator _first,_RandomAccessIterator _last)if(_first=_last)return;for(_RandomAccessIterator _i=_first+1;_i!=_last;+_i)if(*_i*_first)typename iterator_traits:value_type
4、 _val=_GLIBCXX_MOVE(*_i);_GLIBCXX_MOVE_BACKWARD3(_first,_i,_i+1);*_first=_GLIBCXX_MOVE(_val);else std:_unguarded_linear_insert(_i);bool cmp(A a,A b)return a.cb.c;然后把sort改下:sort(a+1,a+11,cmp);就这样,编译通过!2、RE(Running Error)运时错误图有点=V=具体来说有以下解决法:检查在scanf中是否加了%、&等必要符号。检查数组是否越界(数组下标为负数、数组下标过)。如果使了STL,请认真检查与
5、STL相关的语句,不管是函数还是数据结构。如果使了指针,检查指针是否初始化为NULL。检查是否递归了太多次,导致爆栈。3、WA(Wrong Answer)先想想算法的正确性吧。算法没错?看下:、程序输出了意料之外的结果,如 0、极值。是不是数组没有赋初值?是不是访问了法内存(有时访问法内存不会RE)?循环次数是否远远超过或低于预期?是不是爆int了?、程序输出的结果与推算的不致,但差别不。看看有没有把初值赋错。看看有没有把“=”写成了“=”。看看有没有弄混“”“=”“=”变量类型对不对?输出类型对不对(如scanf(“%c”,(int)a);)?三、熟练运调试功能。不定要打开调试板调试,输出中间变量也是个很好的法。通过对个(或多个)关键变量在程序中的变化与预期变化的差距,往往能发现问题。4、AC(Accepted)那你很棒棒哟!v嘛,以后还会更新的。