C语言编译过程中的错误分析

合集下载

「keilc语言编程常见错误分析」

「keilc语言编程常见错误分析」

1.Warning 280:’i’:unreferencedlocal variable 说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告及即定义的参数在程序中并未调用2Warning 206:’Music3’:missing function-prototype 说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern voidMusic3(void),即作外部宣告3Error:318:can’t open file‘beep.h’说明在编译C:\8051\MANN.C程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h的包含档并存入到c:\8051 的工作目录中ﻫ4 Error237:’LedOn’:function already has a body ﻫ说明LedOn()函数名称重复定义即有两个以上一样的函数名称ﻫ解决方法修正其中的一个函数名称使得函数名称都是独立的ﻫﻫ5 ***WARNING16:UNCALLED SEGMENT,IGNORED FOR OVERLAYPROCESSSEGMENT: ?PR?_DELAYX1MS?DELAY说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms()函数或利用条件编译#if …..#endif,可保留该函数并不编译ﻫ6***WARNING6 :XDATASPACE MEMORY OVERLAPFROM : 0025HTO: 0025H ﻫ说明外部资料ROM的0025H 重复定义地址解决方法外部资料ROM 的定义如下Pdata unsigned char XF R_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它ﻫ7 WARNING206:’DelayX1ms’:missingfunction-prototypeﻫC:\8051\INPUT.CError 267 :’DelayX1ms ‘:requires ANSI-styleprototypeC:\8051\INPUT.C说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms的内容编写完后也要作宣告或作外部8宣告可在delay.h 的包含档宣告成外部以便其它函数调用ﻫﻫ***WARNING1:UNRESOLVED EXTERNAL SYMBOLﻫSYMBOL:MUSIC3解决办法:1.是文件没有添加到工程里。

C语言编程中的常见问题与解决方案

C语言编程中的常见问题与解决方案

C语言编程中的常见问题与解决方案C语言作为一门应用广泛的编程语言,在开发软件和系统方面具有重要的地位。

然而,正如其他编程语言一样,C语言编程过程中也会遇到一些常见问题。

本文将探讨一些常见问题,并提供相应的解决方案,以帮助初学者和有经验的开发者更好地应对这些问题。

问题一:语法错误C语言中最常见的问题之一就是语法错误。

这包括标点符号、括号、分号等基本语法错误,以及函数、变量的声明与使用错误等。

当出现语法错误时,编译器会给出相应的错误提示,例如指出错误的行数和错误类型。

解决方法:-仔细检查代码,确保所有的符号都配对使用,并正确使用分号。

-注意变量和函数的声明与使用,确保它们的类型和参数匹配。

-使用代码编辑器或集成开发环境(IDE),这些工具通常会在编写代码时提供实时语法检查功能,帮助避免语法错误。

问题二:逻辑错误逻辑错误是指程序在运行时没有按照预期的方式执行,即结果不符合预期。

这种错误有时很难察觉,因为它们不会引发编译错误或警告。

解决方法:-使用调试工具,例如gdb,对程序进行逐行调试以找出错误所在。

-仔细检查代码,确保逻辑正确。

可以使用流程图或伪代码来描述程序的逻辑。

-使用断言(assert)来验证代码的假设,有助于提前发现错误。

问题三:内存错误内存错误是指在使用指针时,对未分配或已释放的内存进行访问的错误。

这可能导致程序崩溃或产生不可预测的行为。

解决方法:-确认所有的指针都已正确初始化,并在使用完毕后进行适当的内存释放。

-使用动态内存分配函数(malloc、calloc和realloc)时,要确保分配的内存足够,并在使用完毕后进行释放。

-避免在指针为空时进行解引用操作,应先对指针进行空指针检查。

问题四:性能问题C语言相对底层的特性使其具备高性能的潜力,但在编写代码时也容易出现性能问题。

解决方法:-使用适当的算法和数据结构,优化代码的时间和空间复杂度。

-避免重复计算和不必要的循环。

-使用性能分析工具,例如gprof,帮助定位性能瓶颈,并进行优化。

0xc0000005 c语言

0xc0000005 c语言

标题:探讨0xc0000005错误在C语言中的原因与解决方法一、引言在编程过程中,我们经常会遇到各种各样的错误,而0xc0000005错误无疑是其中一个令人头痛的问题。

尤其在C语言编程中,这种错误更是让人不知所措。

本文将围绕0xc0000005错误展开讨论,分析其原因,并提出解决方法,以帮助读者更好地理解和解决这一问题。

二、0xc0000005错误的原因在C语言编程中,当程序试图访问未分配的内存位置区域时,就会触发0xc0000005错误。

这种错误通常由以下几种原因引起:1.指针错误:在C语言中,指针是一个非常关键的概念。

如果在程序中使用指针时出现了错误,比如指针未初始化或指向了无效的位置区域,就有可能导致0xc0000005错误的发生。

2.内存访问越界:在C语言中,程序对数组或者其他数据结构的访问是非常常见的操作。

但是,如果程序试图访问超出数组或数据结构边界的内存位置区域,就会引发0xc0000005错误。

3.内存泄漏:内存泄漏是指程序在动态内存分配后忘记释放内存空间,导致系统资源的浪费。

当内存泄漏达到一定程度时,就有可能导致0xc0000005错误的发生。

4.使用野指针:野指针是指指针变量指向了已经释放或未分配的内存位置区域。

当程序使用野指针时,就会触发0xc0000005错误。

以上几种原因是导致0xc0000005错误的常见情况,程序员在编程时需要特别注意避免这些问题的发生。

三、解决0xc0000005错误的方法针对0xc0000005错误,我们可以采取以下一些方法来进行解决:1.检查指针使用:在程序中,特别是在涉及指针操作的代码中,务必仔细检查是否存在指针未初始化、指向无效位置区域或者野指针等问题。

可以通过打印指针的值来排查问题,或者使用调试工具进行跟踪定位。

2.加强边界检查:针对数组或者其他数据结构的访问操作,需要加强边界检查,确保程序不会访问超出边界的内存位置区域。

可以使用断言来进行边界检查,或者利用编译器的一些特性来进行静态检查。

C语言中的错误处理和异常处理技术

C语言中的错误处理和异常处理技术

C语言中的错误处理和异常处理技术在C语言编程中,错误处理和异常处理是非常重要的技术。

在程序运行过程中,可能会出现各种意外情况,如输入错误、文件打开失败、内存分配失败等,处理这些异常情况可以提高程序的健壮性和可靠性。

在C语言中,有几种常见的错误处理和异常处理技术:1. 返回值检查:在调用函数时,经常会返回一个特定的值来表示函数执行的结果。

程序员可以检查返回值来判断函数是否运行成功,并据此做出相应的处理。

例如,当调用文件读写函数时,可以检查返回值是否为NULL来判断文件是否打开成功。

2. 错误码:有些函数在执行过程中会返回一个错误码,表示出现了何种错误。

程序员可以根据该错误码来分析问题所在,并采取相应的措施。

例如,标准函数库中的errno变量就是用来存储错误码的。

3. 异常处理:C语言并没有内建的异常处理机制,但可以通过setjmp和longjmp函数来实现简单的异常处理。

setjmp函数设置一个跳转点,然后程序在执行过程中发生异常时,可以使用longjmp函数跳转到之前设置的跳转点,从而实现异常处理。

4. 信号处理:在Unix/Linux系统中,程序可以通过信号处理机制来处理异常情况。

可以使用signal函数注册一个信号处理函数,当接收到相应的信号时,程序将调用该函数来处理异常。

常见的信号包括SIGSEGV(段错误)、SIGFPE(浮点异常)等。

5. 强制类型转换:有时候程序需要进行类型转换操作,但会出现类型不匹配的情况,造成编译或运行错误。

在这种情况下,程序员可以使用强制类型转换来解决问题,通过将数据强制转换为目标类型来消除警告或错误。

总的来说,良好的错误处理和异常处理是一个程序的重要组成部分,可以帮助程序更加健壮地运行。

程序员需要在编写代码的过程中考虑可能出现的各种异常情况,采取相应的措施来处理这些异常,以确保程序的稳定性和可靠性。

通过合理的错误处理和异常处理,可以提高代码的质量和可维护性,为软件开发工作带来很大的便利。

C语言程序常见错误与调试方法

C语言程序常见错误与调试方法

1、语法错误
• 语法错误是指那些由于编程中输入不符合语法规 则产生的错误。
• 例如:表达式不完整、缺少必要的标点符号、关 键字输入错误、数据类型不匹配、循环语句或选 择语句的关键字不配对等。
• 通常,编译器对程序进行编译的过程中,会把检 测到的语法错误以提示的方式列举出来。
C Programming
C Programming
(三)C语言程序调试方法
• 总之,程序调试是一项深入细致的工作,需要下 功夫,动脑子,善于积累经验。在程序调试过程 中往往反映出一个人的水平、经验和态度。希望 大家给以足够的重视。上机调试程序的目的决不 是为了“验证程序的正确”,而是“掌握调试的 方法和技术”,要学会自己找问题,这样慢慢自 己就会写出错误较少的实用程序。
C语言程序常见错误与调试方法
(一)C语言程序常见错误
• 程序设计很少能够没有错误的一次完成,在编程 的过程中由于种种原因,总会出现这样或那样的 错误,这些程序的错误也就是常说的“Bug”, 而检测并修正这些错误就是“Debug”(调试)。
• 程序错误可分为三类:语法错误、运行错误和逻 辑错误。
C Programming
C Programming
(三)C语言程序调试方法
• 为了更有效地进行人工检查,所编的程序应力求 做到以下几点:
1)应当采用结构化程序方法编程,以增加可读性; 2)尽可能多加注释,以帮助理解每段程序的作用; 3)在编写复杂的程序时不要将全部语句都写在
main函数中,而要多利用函数,用一个函数来实 现一个单独的功能。这样便于分别检查和处理。
C Programming
(三)C语言程序调试方法
2、在人工检查无误后,再上机调试。即动态检查。 • 在编译时会给出语法错误的信息,调试时可以根

C语言编译中的常见错误

C语言编译中的常见错误

C语⾔编译中的常见错误C语⾔编译中的常见错误1、警告类错误‘XXX’declare but never used变量XXX已定义但从未⽤过。

‘XXX’is assigned a value which is never used变量XXX已赋值但从未⽤过。

Code has no effect 程序中含有没有实际作⽤的代码。

Non-portable pointer conversion不适当的指针转换,可能是在应该使⽤指针的地⽅⽤了⼀个⾮0的数值。

Possible us e of ‘XXX’before definition表达式中使⽤了未赋值的变量Possibly incorrect assignment这样的赋值可能不正确Redeclaration of ‘main’⼀个程序⽂件中主函数main不⽌⼀个。

Suspicious pointer conversion可疑的指针转换。

通常是使⽤了基本类型不匹配的指针。

Unreachable code程序含有不能执⾏到的代码。

2、错误或致命错误Compound statement missing } in function main程序结尾缺少括号}。

“}”expected;“(”expected等复合语句或数组初始化的结尾缺少“)”;“(”。

Case outside of switch case不属于Switch结构,多由于switch结构中的花括号不配对所致。

Case statement missing ‘:’switch结构中的某个case之后缺少冒号。

Constant expression required定义数组时指定的数组长度不是常量表达式。

Declaration syntax error 结构体或联合类型的定义后缺少分号。

Declaration was expected 缺少说明,通常是因为缺少分界符如逗号、分号、右圆括号等所引起的。

Default outside switch Default部分放到了switch结构之外,⼀般是因为花括号不匹配⽽引起的。

C语言常见错误

C语言常见错误

对于刚学编程,刚接触C++的新手来说,编译运行报错是最头疼的一件事,爆出一堆英文,英语差一点的又不知道什么意思,所以也不知道如何去改,在此,我给大家传一份常见错误中英文对照表及简单解释,希望可以帮到大家:fatal error C1003: error count exceeds number; stopping compilation中文对照:(编译错误)错误太多,停止编译分析:修改之前的错误,再次编译fatal error C1004: unexpected end of file found中文对照:(编译错误)文件未结束分析:一个函数或者一个结构定义缺少“}”、或者在一个函数调用或表达式中括号没有配对出现、或者注释符“/*…*/”不完整等fatal error C1083: Cannot open include file: 'xxx': No such file or directory中文对照:(编译错误)无法打开头文件xxx:没有这个文件或路径分析:头文件不存在、或者头文件拼写错误、或者文件为只读fatal error C1903: unable to recover from previous error(s); stopping compilation中文对照:(编译错误)无法从之前的错误中恢复,停止编译分析:引起错误的原因很多,建议先修改之前的错误error C2001: newline in constant中文对照:(编译错误)常量中创建新行分析:字符串常量多行书写error C2006: #include expected a filename, found 'identifier'中文对照:(编译错误)#include命令中需要文件名分析:一般是头文件未用一对双引号或尖括号括起来,例如“#include stdio.h”error C2007: #define syntax中文对照:(编译错误)#define语法错误分析:例如“#define”后缺少宏名,例如“#define”error C2008: 'xxx' : unexpected in macro definition中文对照:(编译错误)宏定义时出现了意外的xxx分析:宏定义时宏名与替换串之间应有空格,例如“#define TRUE"1"”error C2009: reuse of macro formal 'identifier'中文对照:(编译错误)带参宏的形式参数重复使用分析:宏定义如有参数不能重名,例如“#define s(a,a) (a*a)”中参数a重复error C2010: 'character' : unexpected in macro formal parameter list中文对照:(编译错误)带参宏的形式参数表中出现未知字符分析:例如“#define s(r|) r*r”中参数多了一个字符‘|’error C2014: preprocessor command must start as first nonwhite space中文对照:(编译错误)预处理命令前面只允许空格分析:每一条预处理命令都应独占一行,不应出现其他非空格字符error C2015: too many characters in constant中文对照:(编译错误)常量中包含多个字符分析:字符型常量的单引号中只能有一个字符,或是以“\”开始的一个转义字符,例如“char error = 'error';”error C2017: illegal escape sequence中文对照:(编译错误)转义字符非法分析:一般是转义字符位于' ' 或" " 之外,例如“char error = ' '\n;”error C2018: unknown character '0xhh'中文对照:(编译错误)未知的字符0xhh分析:一般是输入了中文标点符号,例如“char error = 'E';”中“;”为中文标点符号error C2019: expected preprocessor directive, found 'character'中文对照:(编译错误)期待预处理命令,但有无效字符分析:一般是预处理命令的#号后误输入其他无效字符,例如“#!define TRUE 1”error C2021: expected exponent value, not 'character'中文对照:(编译错误)期待指数值,不能是字符分析:一般是浮点数的指数表示形式有误,例如123.456Eerror C2039: 'identifier1' : is not a member of 'identifier2'中文对照:(编译错误)标识符1不是标识符2的成员分析:程序错误地调用或引用结构体、共用体、类的成员error C2041: illegal digit 'x' for base 'n'中文对照:(编译错误)对于n进制来说数字x非法分析:一般是八进制或十六进制数表示错误,例如“int i = 081;”语句中数字‘8’不是八进制的基数error C2048: more than one default中文对照:(编译错误)default语句多于一个分析:switch语句中只能有一个default,删去多余的defaulterror C2050: switch expression not integral中文对照:(编译错误)switch表达式不是整型的分析:switch表达式必须是整型(或字符型),例如“switch ("a")”中表达式为字符串,这是非法的error C2051: case expression not constant中文对照:(编译错误)case表达式不是常量分析:case表达式应为常量表达式,例如“case "a"”中“"a"”为字符串,这是非法的error C2052: 'type' : illegal type for case expression中文对照:(编译错误)case表达式类型非法分析:case表达式必须是一个整型常量(包括字符型)error C2057: expected constant expression中文对照:(编译错误)期待常量表达式分析:一般是定义数组时数组长度为变量,例如“int n=10; int a[n];”中n为变量,这是非法的error C2058: constant expression is not integral中文对照:(编译错误)常量表达式不是整数分析:一般是定义数组时数组长度不是整型常量error C2059: syntax error : 'xxx'中文对照:(编译错误)‘xxx’语法错误分析:引起错误的原因很多,可能多加或少加了符号xxxerror C2064: term does not evaluate to a function中文对照:(编译错误)无法识别函数语言分析:1、函数参数有误,表达式可能不正确,例如“sqrt(s(s-a)(s-b)(s-c));”中表达式不正确2、变量与函数重名或该标识符不是函数,例如“int i,j; j=i();”中i不是函数error C2065: 'xxx' : undeclared identifier中文对照:(编译错误)未定义的标识符xxx分析:1、如果xxx为cout、cin、scanf、printf、sqrt等,则程序中包含头文件有误2、未定义变量、数组、函数原型等,注意拼写错误或区分大小写。

C语言中的错误处理机制

C语言中的错误处理机制

C语言中的错误处理机制在编程过程中,错误处理机制是非常重要的,它可以帮助我们有效地处理程序中可能出现的错误,保证程序的稳定性和可靠性。

在C语言中,错误处理主要通过返回值和错误码来实现。

首先,我们可以通过函数的返回值来判断函数执行是否成功。

通常情况下,函数执行成功时返回0,执行失败时返回非0的错误码。

这样,我们在调用函数后可以根据返回值来判断是否出现错误,并采取相应的措施。

例如,当调用malloc函数分配内存时,如果返回NULL,则表示内存分配失败,我们可以在程序中进行相应的错误处理,如释放已分配的内存或者提示用户内存分配失败。

另外,C语言还提供了一些标准的错误码,可以帮助我们更方便地进行错误处理。

比如,errno变量用来保存最近一次发生错误的错误码,我们可以通过 perror 函数来输出错误信息。

这样就可以更直观地看到程序出错的原因,有助于我们快速定位和解决问题。

除了使用返回值和错误码外,我们还可以使用C语言中的一些错误处理函数来帮助我们处理错误。

例如,通过setjmp和longjmp函数可以实现跳转式错误处理,可以在程序的任意位置跳转到事先设定的位置进行错误处理。

这种方法适用于一些特殊场景,如资源释放、异常处理等。

另外,C标准库中还提供了一些异常处理函数,如signal函数用来处理信号,当程序接收到信号时可以执行相应的处理函数。

这些函数可以帮助我们应对一些非预期的错误,保证程序的正常执行。

总的来说,C语言中的错误处理机制主要通过返回值、错误码、标准错误处理函数和信号处理函数来实现。

良好的错误处理机制不仅可以帮助我们及时发现和解决问题,还可以提高程序的鲁棒性和可靠性。

因此,在编写C语言程序时,我们应该重视错误处理机制的设计,养成良好的错误处理习惯,保证程序的稳定运行。

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

C语言编译过程中的错误分析语言的最大特点是:功能强、使用方便灵活。

C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。

看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考。

1.书写标识符时,忽略了大小写字母的区别。

main(){int a=5;printf("%d",A);}编译程序把a和A认为是两个不同的变量名,而显示出错信息。

C认为大写字母和小写字母是两个不同的字符。

习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。

2.忽略了变量的类型,进行了不合法的运算。

main(){float a,b;printf("%d",a%b);}%是求余运算,得到a/b的整余数。

整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。

3.将字符常量与字符串常量混淆。

char c;c="a";在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。

C规定以“”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘',而把它赋给一个字符变量是不行的。

4.忽略了“=”与“==”的区别。

在许多高级语言中,用“=”符号作为关系运算符“等于”。

如在BASIC程序中可以写if (a=3) then …但C语言中,“=”是赋值运算符,“==”是关系运算符。

如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。

由于习惯问题,初学者往往会犯这样的错误。

5.忘记加分号。

分号是C语句中不可缺少的一部分,语句末尾必须有分号。

a=1b=2编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。

改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。

{ z=x+y;t=z/100;printf("%f",t);}对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。

6.多加分号。

对于一个复合语句,如:{ z=x+y;t=z/100;printf("%f",t);};复合语句的花括号后不应再加分号,否则将会画蛇添足。

又如:if (a%3==0);I++;本是如果3整除a,则I加1。

但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。

再如:for (I=0;I<5;I++);{scanf("%d",&x);printf("%d",x);}本意是先后输入5个数,每输入一个数后再将它输出。

由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。

7.输入变量时忘记加地址运算符“&”。

int a,b;scanf("%d%d",a,b);这是不合法的。

Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。

“&a”指a在内存中的地址。

8.输入数据的方式与要求不符。

①scanf("%d%d",&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:3,4输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。

②scanf("%d,%d",&a,&b);C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。

下面输入是合法的:3,4此时不用逗号而用空格或其它字符是不对的。

3 4 3:4又如:scanf("a=%d,b=%d",&a,&b);输入应如以下形式:9.输入字符的格式与要求不一致。

在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。

scanf("%c%c%c",&c1,&c2,&c3);如输入a b c字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。

10.输入输出的数据类型与所用格式说明符不一致。

例如,a已定义为整型,b定义为实型a=3;b=4.5;printf("%f%dn",a,b);编译时不给出出错信息,但运行结果将与原意不符。

这种错误尤其需要注意。

11.输入数据时,企图规定精度。

scanf("%7.2f",&a);这样做是不合法的,输入数据时不能规定精度。

12.switch语句中漏写break语句。

例如:根据考试成绩的等级打印出百分制数段。

switch(grade){ case 'A':printf("85~100n");case 'B':printf("70~84n");case 'C':printf("60~69n");case 'D':printf("<60n");default:printf("errorn");由于漏写了break语句,case只起标号的作用,而不起判断作用。

因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。

正确写法应在每个分支后再加上“break;”。

例如case 'A':printf("85~100n");break;13.忽视了while和do-while语句在细节上的区别。

(1)main(){int a=0,I;scanf("%d",&I);while(I<=10){a=a+I;I++;}printf("%d",a);}(2)main(){int a=0,I;scanf("%d",&I);doI++;}while(I<=10);printf("%d",a);}可以看到,当输入I的值小于或等于10时,二者得到的结果相同。

而当I>10时,二者结果就不同了。

因为while循环是先判断后执行,而do-while循环是先执行后判断。

对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体。

14.定义数组时误用变量。

int n;scanf("%d",&n);int a[n];数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。

即C不允许对数组的大小作动态定义。

15.在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。

main(){STatic int a[10]={1,2,3,4,5,6,7,8,9,10};printf("%d",a[10]);}C语言规定:定义时用a[10],表示a数组有10个元素。

其下标值由0开始,所以数组元素a[10]是不存在的。

16.初始化数组时,未使用静态存储。

int a[3]={0,1,2};这样初始化数组是不对的。

C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化。

应改为:static int a[3]={0,1,2};17.在不应加地址运算符&的位置加了地址运算符。

scanf("%s",&str);C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&。

应改为:scanf("%s",str);18.同时定义了形参和函数中的局部变量。

int max(x,y)int x,y,z;{z=x>y?x:y;return(z);}形参应该在函数体外定义,而局部变量应该在函数体内定义。

相关文档
最新文档