VisualC60中的调试工具使用及常见错误

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言常见错误及解决方法

(注:红色粗体是常见的错误,请大家检查自己的程序,并注意尽量不要犯这些常见的错误。其余它体是避免错误的方法和正确的写法)

一、基础知识和数据类型、表达式

1、拼写错误,尤其是include,main,void,float等词。C语言的32个关键字与基本含义如下:double :声明双精度变量或函数

int:声明整型变量或函数

char :声明字符型变量或函数

float:声明浮点型变量或函数

void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)

auto :声明自动变量一般不使用

struct:声明结构体变量或函数

break:跳出当前循环

else :条件语句否定分支(与if 连用)

long :声明长整型变量或函数

switch :用于开关语句

case:开关语句分支

enum :声明枚举类型

register:声明积存器变量

typedef:用以给数据类型取别名(当然还有其他作用)

extern:声明变量是在其他文件正声明(也可以看做是引用变量)

return :子程序返回语句(可以带参数,也看不带参数)

union:声明联合数据类型

const :声明只读变量

short :声明短整型变量或函数

unsigned:声明无符号类型变量或函数

continue:结束当前循环,开始下一轮循环

for:一种循环语句(可意会不可言传)

signed:生命有符号类型变量或函数

default:开关语句中的“其他”分支

goto:无条件跳转语句

sizeof:计算数据类型长度

volatile:说明变量在程序执行中可被隐含地改变

do :循环语句的循环体

while :循环语句的循环条件

static :声明静态变量

if:条件语句

2、{},[],(),‘’,“”不配对。解决这个问题最好的方法就是每当写这些符号的时候就

先写成一对,然后再在中间加内容。

3、忘记在语句的末尾加分号,或在预处理命令后多加分号。记住:每一个语句的后边都要

加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命

令写在一行。

4、混淆/和\;注释对应的符号是/* */,而转义字符是以\开头,除号是/。

5、printf()和scanf()的参数设置有误,主要表现在以下几方面:

●类型不匹配的问题。(例如:有float a=3.5,但输出的时候printf(“a=%d”,a);则屏幕上会

显示出a=0.00000或者提示其它运行错误)。基本原则是:float对应%f, int对应%d, char 对应%c。

●个数不匹配。无论是哪个函数,都可以有n个参数,第一个永远是“”括起来的内容,

表示输出格式。剩下的n-1个是输出的变量或者输入的变量的地址。需要注意的是,如果后边有n-1个参数,那么前边一定对应n-1个%f一类的格式说明符。

●scanf()中变量前忘了加&。记住:scanf()中变量前要有&(但后边学到的字符数组名和指

针前不用加)

6、定义标识符的时候经常出现使用非法字符的情况,例如:标识符中不能用空格,也就是

说不能有这样的定义:int radium of circle;一般情况下可用下划线将三个单词连接在一起。

7、在使用变量前未定义,或未初始化。例如:若下边的sum未定义,则在编译时会提示相

应的错误信息,而若未初始化为0,则求和的结果一定是错误的。

void main()

{ int I,a[10], sum=0; /*只要下边要用,这个定义就必须要有,一般情况下也要有初始值*/ for(I=0;I<10;I++) sum+=a[I];

printf(“%d”,sum);

}

8、符号常量定义错误。例如:#define PI=3.14159,这里的=应该换成空格。

9、计算错误。主要注意:++,――和其它运算符一起运算时,除根据优先级进行计算时,

还要考虑先后位置的特殊含义;数据类型不一致时发生的自动转换也会导致计算的误差;还要注意求模结果的符号与被除数相同;某些特殊情况下使用懒惰求值法。

10、不能除以0,要做合法性检查;

11、类型溢出。记住每种数据类型的取值范围,确保数据在所定义类型范围之内;

12、数学表达式的格式有误。常见的有:(1)数学与C语言运算表达式的混淆(例如:

=表示赋值,而= =才表示我们数学中的相等关系)。(2)、忽略了运算的优先级。解决这个问题的最好方法就是写数学表达式时不要从左到右,而是按优先级的顺序写,写完优先级高的一个表达式后加上()再写下一级的表达式,例如:计算梯形的面积时,要s=((a+b)*h)/2,不要1/2*a+b*h. (3)忽略了计算和赋值时的自动转换。例如:float half=1/2;

这样,因为=右边是整数相除的结果为整数0,不会得到0.5存入half,进而会影响下边的计算结果。要想不在这儿绊跟头,当计算不同类型的数据时,一定注意会不会出现引起错误的自动转换,建议最好加上强制转换。(4)赋值号左边不是变量,例如:若有#define PI 3.14,程序中又出现PI=3.14159。又例如:f(n)=f(n-1)*n(这是典型的数学语言,在C 语言中右边的乘积不能正确存储,而左边又是一个函数调用)。

13、使用库函数前,尤其是数学函数忘了加#include

二、流程控制

1、丢掉语句结束标记“;”,尤其是for语句中表达式后或do-while语句后的分号,或在预

处理命令后边、while()后、for()后加“;”;

2、If语句或循环语句中逻辑表达式或关系表达式书写错误。一定要注意C语言的条件与数

学表达式的区别(例如我们数学中经常写到的0≤x≤9,在C语言中应该写成x>=0&&x<=9)。

相关文档
最新文档