C语言常犯错误
浅谈C程序中的常见错误
不符 。
它使程 序设计 人员有 发挥 聪 明才 智 、显示 编 程技 巧
的机会 。一个有 经验 的 C程 序设计 人员 可 以编写 出
3在 书 写标 识符 时 , . 忽略 了大小 写字母 的 区别
ma ) . i n(
能解决复 杂 问题 、 运行 效率高 、 占内存少 的高质 量程 序。 C是 函数式 的语 言 , 利用 标准库 函数 和 自己设计 的函数可 以完成 许多 功能 。 因为如此 , 正 C语 言在高
维普资讯
第2 6卷
第2 期
太 原 大 学 教 育 学 院 学 报
J OUR L D NA OFE UCA I N . n JE T ON I SI T T OFT YU N N VE STY AI A U I R I
V0.6No2 1 . 2
太原 大 学教 育 学院 学报
20 0 8年 第 2期 ( 总第 8 7期 )
8e 3a=sr ( ( a ( b ( c ) " qt s s ) s ) s ) ; - — — pif( % f ” a a ;】 r “ ,r ) n e 没有 用 “#ic d <m t. ” 编 译 命 令 , nl e u a h> 预 h 程 序 运行 结果 出错 。
20 0 8年 6月
J n2 0 u .0 8
浅谈 C程 序 中 的 常见 错误
张 融
( 原 大 学 教 育学 院 , 山西 太 原 0 0 01 太 30 )
[ 要 】C语言的功能强 ,使 用方便灵活 ,越来越 受到广泛的重视 。文章列举 了学生在学习扣使 用 C 摘
语 言进 行 程 序 设 计 时容 易犯 的 一 些错 误 ,并做 了简要 分 析 。
C语言新手编程时常犯的10个错误及解决方式
C语言的最大特点是:功能强、使用方便灵活。
C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。
看着有错的程序,不知该如何改起,小编通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考。
1、将字符常量与字符串常量混淆。
char c;c="a";在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。
C规定以“”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘',而把它赋给一个字符变量是不行的。
2、输入数据时,企图规定精度。
scanf("%7.2f",&a);这样做是不合法的,输入数据时不能规定精度。
3、输入字符的格式与要求不一致。
在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。
scanf("%c%c%c",&c1,&c2,&c3);如输入a b c字符“a”送给c1,字符“”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
4、输入输出的数据类型与所用格式说明符不一致。
例如,a已定义为整型,b定义为实型a=3;b=4.5;printf("%f%d ",a,b);编译时不给出出错信息,但运行结果将与原意不符。
这种错误尤其需要注意。
5.switch语句中漏写break语句。
例如:根据考试成绩的等级打印出百分制数段。
switch(grade){case 'A':printf("85~100 ");case 'B':printf("70~84 ");case 'C':printf("60~69 ");case 'D':printf("<60 ");default:printf("error ");}由于漏写了break语句,case只起标号的作用,而不起判断作用。
C语言编程时容易犯的18歌错误 千万要小心哦~
C语言编程时容易犯的18歌错误千万要小心哦~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语句中不可缺少的一部分,语句末尾必须有分号。
C语言编程易犯错误分析
{= + ; z x y pif ” 'Z ; ; r (%dt ) } n ,
{ n , ;= 2 6 ;= + ;r t(%dn , ) } l ga b a 3 7 7 b a l pi f” \”b ; o n
() 4 自增 、 自减 运 算 。C语言 的一 个 特色 就是 自增 、 自减 运 算, 但使 用 + 和一 时 , + 常会 出现 一 些人 们 “ 不 到 ” 副作 用 . 想 的 尤其 是初 学者 一定 要慎 用 。请 看 下面 程序 :
语 言 涉及 的概 念 和规则 较 多 , 用 灵活 , 使 不少 初 学 者感 到 C语 言很难 掌 握且 容易 出错 。下 面笔 者就 多 年 C语 言教 学 心得 体 会 谈谈在 C语 言编 一 2 6 ~ 2 6 3 7 8 3 7 7范 围 内的数 。无 法表 示 大 于 3 7 7的数 。遇 此情 况就 发生 ” 出” 26 溢 ,但运 行时并 不报 错 。 好像 汽车 的里程 表 一样 , 到最 大值 以后 , 从最 小值开 它 达 又
i+ 句 , 终结 果是 无论 3是否 整 除 a i +语 最 , 的值 都将 自增 1 。 ( ) 型数 据 的溢 出 。 3整
ma ( i ) n { t , a 3 7 7 b a 1 i b;= 2 6 .= + ; na pif ” k” b ; r (%dn ,) } n 该 程 序 的 运 行 结 果 是 一 , 非 一 2 6 。 很 多 初 学 者 对 此 非 1并 37 8 常 疑 惑 , 什 么 3 7 7加 1后 不 是 3 7 8 却 得 到一 2 6 为 26 26 , 3 7 8呢 ?因
VC6.0常见错误信息分析
1.程序开发过程中出现的错误类型我们在进行程序设计时,不可避免地会犯错误。
程序中的错误可以分为三类:编译错误、运行时错误和逻辑错误。
1.1编译错误编译错误(Compile errors)又称为编译时错误(Compiling-time errors): 是由于错误的编码产生的。
例如关键字拼写错误、将中文标点符号当成英文符号使用、遗漏了某些必要的标点符号或者使用了一个没有定义的标识符。
编译错误一般都是语法错误,当编译器对程序进行语法检查时,都能发现这些错误,并能够指出产生错误的位置(标出行号)。
我们可以根据编译出错信息指出的行号找到对应的源代码行改正错误,重新编译源程序。
只有当所有的编译错误被改正后,才能通过编译检查,产生目标代码文件。
改正编译错误的关键是要能正确理解编译器给出的编译错误信息。
VC++环境中的编译、链接错误信息是用英文表示的。
对于英文基础薄弱的读者,可以参考本实验指导书后面的“VC++编译、链接常见错误和警告信息中英文对照”。
通常情况下,一个语法错误可能产生多条编译错误信息,这是由于株连错误造成的,建议读者在处理编译错误时,找到第一个出现错误的位置改正后重新编译。
这样能够避免被株连错误迷惑。
值得指出的是,现在大部分编译器对错误的定位不精确,如果在编译器指出的行没有发现错误,应该向前查找错误。
例如,当提示第10行发生错误时,如果在第10行没有发现错误,请从第10行开始往前查找错误并修改之。
1.2运行时错误运行时错误(Run-time errors)是在程序的运行阶段出现的,当运行环境检测到程序的某些操作无法执行,例如除数为零时,就会出现运行时错误。
当运行环境检测到程序的某些操作是被禁止的,也会产生运行时错误。
例如,访问数组时超越数组的边界,空指针引用(NULL pointer assignment,空指针赋值,即有指针未赋具体地址就使用了)等等。
1.3逻辑错误逻辑错误(Logic errors):当程序没有按照程序员的意图执行时,就表明程序中存在逻辑错误。
C语言期末总结反思
C语言期末总结反思作为一门计算机专业的基础课程,C语言是我们在大学本科阶段必不可少的一门课程。
C语言的学习过程中,我们熟悉了C语言的基本语法、数据类型、运算符等知识点,掌握了C语言的编程方法和编程思想。
在这门课的学习过程中,我遇到过许多困难和挑战,但通过不断努力和学习,我终于顺利完成了这门课程。
在这篇期末总结反思中,我将对自己在C语言学习中的收获、问题和改进方法进行总结和反思。
首先,C语言学习中我所收获的知识和技能方面。
在学习C语言的过程中,我逐渐熟悉了C语言的基本语法和常用的编程方法。
比如,我学会了如何定义变量、使用运算符、编写循环和条件语句等。
这些基础知识为我以后学习更高级的编程语言奠定了坚实的基础,也为我以后深入学习计算机科学和软件工程提供了必要的知识支持。
其次,在C语言学习中我遇到的主要问题。
首先,我在初学C语言时对于语法的理解和掌握不够扎实,经常会犯一些低级的语法错误。
这给我带来了许多不必要的麻烦和时间消耗。
其次,在编写程序时,我经常会遇到逻辑错误和算法问题。
有时我会忽略某些边界条件,导致程序运行不符合预期。
这些错误和问题给我带来了许多迭代和修改代码的困扰。
再次,我在调试程序时经常出现困惑。
有时候我会陷入死循环,有时候我会遇到程序崩溃的情况。
这需要我花费很多时间去排查错误和调整代码。
最后,我总结了一些改进方法和学习经验。
首先,我意识到在学习C语言时,需要更多地进行实践和动手编写代码。
只有通过实际操作,我们才能更好地理解和掌握C语言的各个知识点。
其次,我需要更加重视代码的规范和注释。
良好的代码规范和清晰的注释能够提高代码的可读性和可维护性,并且可以让其他人更容易理解我们的代码。
另外,我还发现参考书籍和资料是学习的重要资源。
通过查阅相关书籍和资料,我们可以更好地了解C语言的各种用法和技巧。
最后,我认识到团队合作的重要性。
在C语言的学习过程中,我们经常需要与其他人合作完成编程任务。
通过与他人的合作,我们可以相互借鉴和学习,提高自己的编程水平。
C语言常见错误分析
电 脑 知 识 与 技 术
研 究 开 发
C 语言常见错误分析
张 家 明
( 东理 工 大 学 工 程技 术 学 院 , 东 淄博 2 5 4 ) 山 山 50 9 摘 要 :本 文通 过 具 体 实例 讲 解 了 c 语 言程 序 设 计 过 程 的 几 个 常 见错 误 :1 使 用 未 定 义 的 变量 ;2进 行 非 法运 算 ;3 输 入数 据 的 方 () () () 式 与要 求 不 符 ;4 循 环 语 句 中的 死 循 环 ;5 复合 语 句 漏 掉 花 括 号 ;6 利 用 “ = 比较 字 符 串是 否 相 等 ;7 误 把 “ ” 为 关 系运 算 中的 () () () = ” () =作 “ 于 ” 算 符 ;8 指 针 变 量 未正 确 赋 值 之 前 就 引用 : 等 运 ()
K y wo d : ln u g ; ro n ls e r s C g a eE ra a i a ys
1 引 言
C 言 是 近 年 来 过 内外 广 泛 使 用 的 计 算 机 程 序 设 计 语 言 . 语 也 是 软 件 开发 人 员 必 须 掌 握 的 一 种 语 言 。C语 言 的 最 大特 点 是 功 能 强 、 用 方 便 灵 活 , 是 由 于 C 编译 程 序 对 语 法 检 查 并 不 象 其 它 使 但 高 级 语 言 那 么 严 格 , 此 给 程 序 的 调 试 带 来 了许 多 不便 . 其 对 因 尤 初 学 C语 言 的人 来 说 , 着有 错 的 程 序 , 知该 从 何 改起 . 人 在 看 不 本 C语 言 的学 习 过程 中积 累 了 一 些 这 方 面 的 经 验 . 写给 各 位 读 者 以 供参考。
黑马程序员C语言教程:初学者或是开发人员常遇到的c语言陷阱
初学者常遇到的c语言陷阱在初学者学习编程的过程中的会遇到一些经常会犯的错误,也许在我们成长起来之后会觉得这些错误实在太低级,但是在牛掰的大虾也是从菜鸟过来的,针对于初学者下边总结了一些我们会经常遇到的陷阱,希望对菜鸟们有帮助:正题:陷阱1:忽略大小写的区别#include<stdio.h>void main(){int a=10;a+=a;printf("%d\n",A);}这个很简单,是基础,c语言变量区分大小写。
代码中的a与A不是同个变量,编译出现A 没定义的错误。
陷阱2:“{}”与“()”使用不当造成错误#include <stdio.h>void main(){int i,j;int a[2][3]={(1,2,3),(4,5,6)};printf("array a:\n");for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf("%d",a[i][j]);}printf("\n");}}}程序结果不能正常输出数组每个元素,编译{(1,2,3),(4,5,6)};时,先进行括号内的逗号运算(取逗号最后的数值),编译生成{3,6};其它元素为0。
正确的写法:{{1,2,3},{4,5,6}};陷阱3:在if,while,#include,#define,for后直接加分号,如for(int a=1;a<10;a++);如果是while,程序一般执行死循环,int a=1;while(a);如果是if,判断语句无效果,比如。
if(a>0);a=-1;无论a是否大于0,结果都是a=-1;如果是#include,程序编译的时候提示错误,无法引用库文件;如果是#define,比如#define a 200;程序在预编译的时候,200;包括分号一同被替换进程序,程序不可能正常编译如果是for循环,跟if一样,事与愿违,循环做无用功,本想循环的printf语句只执行一次。
C#常见的10个错误及解决方法
关于C#C#是达成微软公共语言运行库(CLR)的少数语言中的一种。
达成CLR的语言可以受益于其带来的特性,如跨语言集成、异常处理、安全性增强、部件组合的简易模型以及调试和分析服务。
作为现代的CLR语言,C#是应用最为广泛的,其应用场景针对Windows桌面、移动手机以及服务器环境等复杂、专业的开发项目。
C#是种面向对象的强类型语言。
C#在编译和运行时都有的强类型检查,使在大多数典型的编程错误能够被尽早地发现,而且位置定位相当精准。
相比于那些不拘泥类型,在违规操作很久后才报出可追踪到莫名其妙错误的语言,这可以为程序员节省很多时间。
然而,许多程序员有意或无意地抛弃了这个检测的有点,这导致本文中讨论的一些问题。
本文描述了10个 C# 程序员常犯的错误,或应该避免的陷阱。
尽管本文讨论的大多数错误是针对 C# 的,有些错误与其他以 CLR 为目标的语言,或者用到了Framework Class Library(FCL) 的语言也相关。
常见错误 #1: 把引用当做值来用,或者反过来C++ 和其他很多语言的程序员,习惯了给变量赋值的时候,要么赋单纯的值,要么是现有对象的引用。
然而,在C# 中,是值还是引用,是由写这个对象的程序员决定的,而不是实例化对象并赋值的程序员决定的。
这往往会坑到 C# 的新手程序员。
如果你不知道你正在使用的对象是否是值类型或引用类型,你可能会遇到一些惊喜。
例如:Point point1 = new Point(20, 30);Point point2 = point1;= 50;; um();虽然这是一个很简单的例子,在有些情况下,一个单一的LINQ语句可以轻易地替换掉你代码中一个迭代循环(或嵌套循环)里的几十条语句。
更少的代码通常意味着产生Bug的机会也会更少地被引入。
然而,记住,在性能方面可能要权衡一下。
在性能很关键的场景,尤其是你的迭代代码能够对你的集合进行假设时,LINQ做不到,所以一定要在这两种方法之间比较一下性能。
C语言编程中常见的五种错误及对应解决方案
C语⾔编程中常见的五种错误及对应解决⽅案⽬录1. 未初始化的变量2. 数组越界3. 字符串溢出4. 重复释放内存5. 使⽤⽆效的⽂件指针前⾔:C 语⾔有时名声不太好,因为它不像近期的编程语⾔(⽐如 Rust)那样具有内存安全性。
但是通过额外的代码,⼀些最常见和严重的 C 语⾔错误是可以避免的。
即使是最好的程序员也⽆法完全避免错误。
这些错误可能会引⼊安全漏洞、导致程序崩溃或产⽣意外操作,具体影响要取决于程序的运⾏逻辑。
下⽂讲解了可能影响应⽤程序的五个错误以及避免它们的⽅法:1. 未初始化的变量程序启动时,系统会为其分配⼀块内存以供存储数据。
这意味着程序启动时,变量将获得内存中的⼀个随机值。
有些编程环境会在程序启动时特意将内存“清零”,因此每个变量都得以有初始的零值。
程序中的变量都以零值作为初始值,听上去是很不错的。
但是在 C 编程规范中,系统并不会初始化变量。
看⼀下这个使⽤了若⼲变量和两个数组的⽰例程序:#include <stdio.h>#include <stdlib.h>intmain(){int i, j, k;int numbers[5];int *array;puts("These variables are not initialized:");printf(" i = %d\n", i);printf(" j = %d\n", j);printf(" k = %d\n", k);puts("This array is not initialized:");for (i = 0; i < 5; i++) {printf(" numbers[%d] = %d\n", i, numbers[i]);}puts("malloc an array ...");array = malloc(sizeof(int) * 5);if (array) {puts("This malloc'ed array is not initialized:");for (i = 0; i < 5; i++) {printf(" array[%d] = %d\n", i, array[i]);}free(array);}/* done */puts("Ok");return 0;}这个程序不会初始化变量,所以变量以系统内存中的随机值作为初始值。
C语言编程时常犯的17种错误
C语言编程时常犯的17种错误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不同的)。
C常见编译链接错误即解决方法
C++课程上机实验常见错误汇集1.在源码中遗失“;”调试器错误信息:syntax err or : missing ';'2.缺少命名空间使用定义:即缺少“using namesp ace std;”调试器错误信息:例:error C2065: 'cout' : undecl ared identifier例如cout/cin/endl/<</>>等在命名空间中定义的符号和标示符无法使用。
3.变量未定义就直接使用调试器错误信息:例:error C2065: 'i' : undeclare d identifier C++语言中,变量的使用必需遵循先声明定义,后使用的原则。
4.在程序中使用中文标示符,如将英文”;”错误输入成了”;”调试器错误信息:error C2018: unknowncharacter '0xa3'在C++中,除程序注释可以采用中文外,其余字符要求使用英文。
不少同学在建立工程或程序名称时也使用中文名称,建议改掉这种习惯。
5.在使用输入输出流的时候错误使用了标示符“>>”“<<”,例cout>>a;调试器错误信息:例:error C2676: binary '>>' : 'classstd::basic_ostream<char,st ructstd::char_tr aits<char>>' doe s not define thi s operator or aconversion to atype acceptableto the predefine d operator对于流操作的方向搞错是一个普遍错误,问题本来并不复杂,可能是由于没有认真看书的原因。
C 语言初学者有哪些常见的基本错误?
C语言是一门广泛使用的编程语言,但对于初学者来说,学习过程中会遇到一些常见的基本错误。
这些错误可能会导致程序出错或者无法正常运行,因此了解和避免这些错误是非常重要的。
1.拼写错误拼写错误是初学者经常犯的错误。
在C语言中,拼写错误可能会导致程序无法编译或者运行错误。
例如,将“printf”拼写为“prinf”或者将“main”拼写为“mian”都会导致程序无法编译。
为了避免这种错误,建议初学者在编写代码时仔细检查拼写,或者使用IDE(集成开发环境),它可以自动检查拼写错误并提供纠正建议。
2.语法错误语法错误是初学者常见的错误之一。
在C语言中,语法错误可能会导致程序无法编译或者运行错误。
例如,忘记添加分号或者花括号不匹配都会导致程序无法编译。
为了避免这种错误,建议初学者仔细阅读代码,并确保所有语法都是正确的。
使用IDE可以帮助初学者检测语法错误。
3.数组越界数组越界是初学者常见的错误之一。
在C语言中,数组越界可能会导致程序崩溃或者出现未定义的行为。
例如,访问数组中不存在的元素或者访问超出数组范围的元素都会导致数组越界。
为了避免这种错误,建议初学者确保数组索引在数组范围内,并使用循环结构来遍历数组。
使用IDE可以帮助初学者检测数组越界错误。
4.变量未初始化变量未初始化是初学者常见的错误之一。
在C语言中,未初始化的变量可能会导致程序出现未定义的行为。
例如,未初始化的变量可能包含随机值或者空值。
为了避免这种错误,建议初学者在使用变量之前初始化它们。
使用IDE可以帮助初学者检测未初始化的变量。
5.内存泄漏内存泄漏是初学者常见的错误之一。
在C语言中,内存泄漏可能会导致程序消耗大量内存并最终崩溃。
例如,未释放动态分配的内存或者重复释放内存都会导致内存泄漏。
为了避免这种错误,建议初学者在使用动态内存分配时,确保释放所有分配的内存。
使用IDE可以帮助初学者检测内存泄漏。
C语言初学者常见的基本错误包括拼写错误、语法错误、数组越界、变量未初始化和内存泄漏。
C语言中各个错误的意思
puts("海口四日游");
break;
case 'c':
case 'C':
puts("万宁五日游");
E:\C语言\CH-8\例程8-5.cpp:28: error: `(((void)r1, (void)r2), h)' cannot be used as a function
E:\C语言\CH-8\例程8-5.cpp:28: error: `2' cannot be used as a function”
“char select;
printf("请选择你要去的地方:\n(A) 三亚\n(B) 海口\n(C) 万宁\n");
scanf("%d" , &select); ←此处格式化字符符号错误
switch(select)
{
{
int i;
int sum; 此处未声明sum 的初始值
for(i=0;i<b;i++)
{
sum=sum*a;
}
return sum;
}
这是一个自定义函数的定义内容。
显示的结果却总是错的!!!!
你的字母输错啦!仔细看看有“put”这个函数么,应该是“puts”吧??
Eg: void print_word1 (char* str)
{
put ("?aê?print_word1oˉêy"); 这里的put不对
put ("str");
}
正确:
<12>在局部变量中声明的时候,容易犯习惯性的定义问题。
c语言理论考试要点 (1)
C语言理论考试要点学习C语言后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。
比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。
学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。
C语言学得好的学生都是知难而上,不轻易放弃的强者。
等级考试分优秀、合格、不合格三档。
江苏省计算机二级考试成绩分为:大学计算机信息基础20分C语言理论部分40分C语言上机考试40分证书分:合格、优秀两种,没有期限通过准考证在网上查询成绩,大约考完后50天可查。
期末复习以理论为主,上机为次;暑假开始以上机为主,理论为次。
二级C语言等级考试没有通过的98%以上是因为上机未达线。
目前我校C语言等级考试通过率为40%左右。
仔细研究大纲和样题,大纲提到的知识点和库函数要熟练掌握。
常用算法默写后对照,再默写再对照。
不要不肯动笔,多做归纳总结,包括知识点的归纳和算法的归纳。
大学计算机信息基础占20分,要作适当复习。
C语言理论部分占40分,上机占40分。
C语言理论题大多数是数组以后的内容,但要熟练运用前面表达式、数据类型、三种基本结构等知识。
选择题需要记忆的知识包括计算机基础知识、基本概念。
这些内容看似不起眼,但如果不适当加以记忆,考试时因此失分十分可惜。
我们可以在理解的基础上归纳整理,适当记忆。
近年大学计算机信息基础考得比较实用、如:优盘、数量级、存取速度、通讯技术、网络知识。
每年必考的知识点如下:➢循环嵌套➢字符数组的输入输出、插入或删除、或排序、或重新组合➢函数参数的传递,传值和传址的不同、函数的定义和返回值➢变量的作用域(选择题,全局变量和局部变量的区别,如:05春25题)➢变量的存储类型(填空题,如:04春填空第9题,每次调用函数,静态变量y保留上次调用时的值;C是全局变量,&b对应指针sum传址,b和*sum值一致;a单向传值给x,x的值不影响a)➢指针传址、指针数组、指针处理二维数组、指针处理字符串数组和字符串、指针处理结构体和链表(填空题)、指针与结构体结合(填空题)笔试只有选择题和填空题两种题型。
C语言常见错误及解决方法
C语言常见错误及解决方法C语言是一种广泛应用于系统软件和应用软件开发的编程语言。
然而,由于其语法较为复杂,初学者在编写C语言程序时常会犯一些常见错误。
本文将介绍几种常见的C语言错误及解决方法。
1. 语法错误(Syntax Error)语法错误是指程序中存在错误的语法结构,编译器无法理解这些语法结构,从而导致编译错误。
常见的语法错误包括拼写错误、大小写错误、标点符号错误等。
解决方法是仔细检查代码中的语法结构,确保语法正确。
2. 声明错误(Declaration Error)声明错误是指在程序中存在未定义或重复定义的变量、函数等声明。
解决方法是确保声明的变量和函数在使用之前已被正确地定义,避免重复定义。
3. 类型错误(Type Error)类型错误是指在程序中使用了错误的数据类型。
例如,将整数赋值给浮点型变量,或将字符赋值给整型变量等。
解决方法是确保赋值的数据类型与变量的数据类型匹配。
4. 逻辑错误(Logic Error)逻辑错误是指程序在运行过程中逻辑上的错误,导致程序得出错误的结果。
例如,使用错误的循环条件,导致循环无法正常结束。
解决方法是仔细检查程序的逻辑,确保逻辑正确,避免逻辑错误。
5. 数组越界错误(Array Out-of-Bounds Error)数组越界错误是指访问数组时超出了数组的边界。
例如,对一个长度为5的数组进行赋值时,访问第6个元素。
解决方法是确保对数组的访问不超过数组的边界。
6. 内存泄露错误(Memory Leak Error)内存泄露错误是指在程序中申请内存空间后,未正确释放该空间,导致内存的持续分配而无法释放。
解决方法是在申请内存空间后,使用相应的释放函数(如free()释放内存空间。
7. 死循环错误(Infinite Loop Error)死循环错误是指程序中存在无法结束的循环结构。
例如,循环条件永远为真,导致程序无法终止。
解决方法是仔细检查循环条件,确保循环能够正常结束。
C语言入门易犯错误总结
C语言初学者易犯错误
如果你是一个初学者,当你的C程序发生了错误,你要相信你自己是错的,因为你犯错误的可能性远远大于书本以及开发工具的错误。
查看错误提示
a)undeclared:可能错误为1,5,6, 8
b)expected…..expression:3,7
c)expected identifier or '(' : 2
d)extraneous closing brace…..: 2
e)redefinition of….. : 4
对应常见错误:
1.使用了未定义的变量。
2.括号匹配错误(例如,{}没有一一配对)。
3.标点符号使用错误(例如,使用中文的分号,双引号,单引号)。
4.重复定义变量(例如,intnum,num;)。
5.单词拼写错误(例如,将main写成了mian)。
6.使用了函数库中的函数,忘记引入对应的头文件。
7.忘记用分号分割语句。
8.自定义函数未声明。
编译时常见错误
1. 数据类型错误。
此类错误是初学者编程时的常见现象, 下面是一些要引发注意的错误:(1) 所有变量和常量必需要加以说明。
(2) 变量只能赋给相同类型的数据。
(3) 对scanf()语句, 用户可能输入错误类型的数据项, 这将致使运行时犯错, 并报犯错信息。
为幸免如此的错误显现, 你就提示用户输入正确类型的数据。
(4) 在执行算术运算时要注意:a. 依照语法规那么书写双精度数字。
要写0.5, 而不是写.5; 要写1.0, 而不是1。
尽管C语言会自动地把整型转换成双精度型, 但书写双精度型是个好适应。
让C语言为你做强行转换这是一种效率不高的程序设计风格。
这有可能致使转换产生错误。
b. 不要用0除。
这是一个灾难性的错误, 它会致使程序失败, 不管C 语言的什么版本, 都是如此, 执行除法运算要专门警惕。
c. 确保所有的双精度数(包括那些程序输入用的双精度数) 是在实数范围之内。
d. 所有整数必需在整数许诺的范围内。
这适用于所有计算结果, 包括中间结果。
2. 将函数后面的";"忘掉。
现在错误提示色棒将停在该语句下的一行, 并显示:Statement missing ; in function <函数名>3. 给宏指令如#include, #define等语句尾加了";"号。
4. "{"和"}"、"("和")"、"/*"和"*/"不匹配。
引时色棒将位于错误所在的行, 并提示出有关丢掉括号的信息。
5. 没有效#include指令说明头文件, 错误信息提示有关该函数所利用的参数未概念。
6. 利用了Turbo C保留关键字作为标识符, 现在将提示概念了太多数据类型。
7. 将概念变量语句放在了执行语句后面。
现在会提示语法错误。
8. 利用了未概念的变量, 现在屏幕显示:Undefined symbol '<变量名>' in function <函数名>9. 警告错误太多。
C语言学习心得
C语言学习心得1) 分清主次学习C语言最忌讳的就是不分主次,这是绝大多数学习C语言的同学都会犯的错误!我们刚开始学习的时候只需要将那些最重要的、最核心的学会就已经很好了!先将最精髓的东西提炼出来,再将整个C语言学一遍,从全局上把握C 语言。
对于那些次要的,有需要再学,没有需要也可以不学。
2) 一定要多上机,多“敲”代码编程是一门实践性的学科,绝对不是理论。
如果不动手“敲”代码的话,永远都学不会编程。
很多问题只有在“敲代码”的时候才能发现,才会有更加深刻的体会、领悟和理解。
而不是靠死记硬背书中的注意点,那样真的很痛苦。
我在学习编程的时候从来都不会刻意记忆什么注意点,这些知识点都是在不停“敲代码”的过程中,自然而然地融入我的身体中的。
你们一定要记住一句话:“程序是写出来的,不是看书看出来的!”3) 要“敲代码”,必学盲打盲打是学习编程最基本的技能。
就算你C语言学得很好,达到了“思想在键盘上飞舞”的境界,但是如果你不会盲打,那你想“飞”也“飞”不起来!所以,不会盲打会非常影响你的学习效率。
4) 要学会记笔记编程需要不断地积累。
我们一定要学会模仿别人优秀的代码、优秀的算法,然后将它记下来。
一定要站在巨人的肩膀上学习。
但是我们的记忆能力是有限的,时间长了难免会遗忘,所以一定要学会记笔记。
一有心得、体会、感悟就写下来,这些都是很珍贵的。
我们在记笔记的时候,如果眼前没有计算机则可以先写在纸上,但事后一定要将它整理成电子版。
整理成电子版看起来会很方便、舒适,还可以随意地增添和删改,保存时间也长。
C语言学习心得2 学习C程序这门课一年了,这是我们学的第一门专业课,在大学里C语言不但是计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程。
所以作为我这个计算机专业的学生来说当然十分重要,老师在第一节课说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个年的学习,使我由初步掌握简单的应试知识到完成高难度的深入编程,如我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。
C语言错误:HEAPCORRUPTIONDETECTED
C语⾔错误:HEAPCORRUPTIONDETECTED 程序源代码://写⽂件两种⽅式(⽂本⽂件和⼆进制⽂件)#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>//⽂本写⽂件int writeWord(const char *path,const char *pword){int ERRO_MSG = 0;if (path == NULL){ERRO_MSG = 1;printf("path==NULL erro msg:%d\n", ERRO_MSG);return ERRO_MSG;}if (pword == NULL){ERRO_MSG = 2;printf("pword==NULL erro msg:%d\n", ERRO_MSG);return ERRO_MSG;}//定义⽂件指针FILE *fpw=NULL;//打开⽂件fpw = fopen(path, "w");//w 打开只写⽂件,若⽂件存在,则⽂件长度清零,即⽂件内容会消失,若⽂件不存在则建⽴该⽂件//判断⽂件是否打开成功if (fpw==NULL){ERRO_MSG = 1;printf("⽂件打开失败 fpw==NULL erro msg:%d\n", ERRO_MSG);return ERRO_MSG;}//开始写⽂件fputs(pword, fpw);//关闭⽂件if (fpw!=NULL){fclose(fpw);}return ERRO_MSG;}//⽂件读⽂件char ** readtxt(const char *path)//⼆级指针做输出{int ERRO_MSG = 0;if (path==NULL){ERRO_MSG = 1;printf("path==NULL erro msg:%d\n", ERRO_MSG);//return ERRO_MSG;}//定义⽂件指针FILE *pfr = NULL;//打开⽂件pfr = fopen(path, "r");if (pfr==NULL){ERRO_MSG = 3;printf("pfr==NULL erro msg:%d,⽂件路径:%s\n", ERRO_MSG, path);//return ERRO_MSG;}//开始读⽂件//1.定义⽂件缓存数组char bufarr[100] = { 0 };//2.0 获取⽂本具体⾏数//2.1 定义临时变量int index = 0;//2.0定义返回⼆维数组char **resbuf = (char **)malloc(sizeof(char *)*5);//读⽂件while (!feof(pfr)){//feof()如果⽂件结束,则返回⾮0值,否则返回0memset(bufarr, 0, sizeof(char));fgets(bufarr, 100, pfr);char *bufstr1 = (char *)malloc(sizeof(char)*strlen(bufarr));//拷贝字符串strcpy(bufstr1, bufarr);resbuf[index] = bufstr1;index++;//resbuf = (char **)realloc(resbuf, sizeof(char *)*(index + 2));}resbuf[index] = NULL;return resbuf;}void main(){//定义⽂件路径char *path = "E:\\Test\\CwordTest\\";//只适⽤于windowchar *path1 = "E:/Test/CwordTest/a1.txt";//writeWord(path1, "asfasdfasdgafdsgadf\r\n打倒⽇本帝国主义和所对符合⼤家的哟撒\r\ndsafgshfetgrhet");char **pdata = NULL;pdata=readtxt(path1);int index = 0;if (pdata!=NULL){while (pdata[index] != NULL){printf("%s\n", pdata[index]);//释放内存free(pdata[index]);pdata[index] = NULL;index++;}free(pdata);pdata = NULL;}system("pause");}报错页⾯错误解析:这个错误是在释放字符串指针的时候报错,具体⾏数如图错误原因:通过对错误进⾏百度,我理解了这个错误的原因是,释放⼀个字符串指针,但是这个字符串指针被破坏了,举例说明:char *str=(char *)malloc(sizeof(char)*10);//分配了10个字节⼤⼩的内存空间strcpy(str,"1234567890");//字符串拷贝,字符串”1234567890“是11个字符,这个拷贝操作会破坏字符指针str,此时会拷贝11字节到str指向的内存空间⾥,超过了原来分配的10个字节⼤⼩的内存空间如果这时候⽤free(str);释放内存就会报错 ---HEAP CORRUPTION DETECTED错误产⽣原因:这个错误产⽣的原因就是对strlen()这个函数理解的不到位,举例:char bufarr[100] = "1234567890";printf("%d\n", strlen(bufarr));打印出10,但是如果你分配字符串应该分配11个,留⼀个字节给'\0'⽽我上⾯就犯了这个错误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言编程时常犯错误
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'和‘\0',而把它赋给一个字符变量是不行的。
4、忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。
如在BASIC程序中可以写
if (a=3) then …
但C语言中,“=”是赋值运算符,“==”是关系运算符。
如:
if (a==3) a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。
由于习惯问题,初学者往往会犯这样的错误。
5、忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1
b=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);
输入应如以下形式:
a=3,b=4
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%d\n",a,b);
编译时不给出出错信息,但运行结果将与原意不符。
这种错误尤其需要注意。
11、输入数据时,企图规定精度。
scanf("%7.2f",&a);
这样做是不合法的,输入数据时不能规定精度。
12.switch语句中漏写break语句。
例如:根据考试成绩的等级打印出百分制数段。
switch(grade)
{
case 'A':printf("85~100\n");
case 'B':printf("70~84\n");
case 'C':printf("60~69\n");
case 'D':printf("<60\n");
default:printf("error\n");
}
由于漏写了break语句,case只起标号的作用,而不起判断作用。
因此,当grade值为A 时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。
正确
写法应在每个分支后再加上“break;”。
例如
case 'A':printf("85~100\n");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);
do
{a=a+I;
I++;
}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]是不存在的。
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);
}
形参应该在函数体外定义,而局部变量应该在函数体内定义。
应改为:
int max(x,y)
int x,y;
{
int z;
z=x>y?x:y;
return(z);
}。