C语言初学者常见错误 | 总结22点

点击蓝字

3336c1e8252ed827fab16ff816da1e74.png

关注我们

正文

一.语言使用错误

在打代码的过程中,经常需要在中文与英文中进行转换,因此常出现一些符号一不小心就用错,用成中文。例如:“;”中文中的分号占用了两个字节,而英文中“;”分号只占用一个字节。编译器只能识别英文。因此会报错。在报错后检查这些字符时最需要眼力和时间的。因此打代码是需注意。

二.忘打分号

分号是C语言是语句的标志,在C中无分号不成语句,无语句不能识别。在编译中如果没有分号,编译器就会将,b=2合到上一个语句a=1中,进而出现语法错误。

4258f7d53e26b1db3ade43ae011ff56c.jpeg
img

三.多打分号

复合语句中,花括号后不应再加分号,虽然不会有什么影响,但是多此一举,毫无意义。

0d1b313d0f3768566b1de5f1514e8354.jpeg
img

另外,if(a == 0)后不应加分号,if(a ==0)后加分号就会是语句提前结束,而使用if的目的就是为了控制其后的语句,加了分号之后。程序将永远执行i++,不论a是否等于0.

885f0d8766de86b9f28dd264fbdf4b01.jpeg
img

for()后不应加分号。

f34d4468db95f81bec23c2a6a6503fe5.jpeg
img

本意是输入4个数,每输入一个数后再将它输出。由于for()后多加了个分号,导致循环变成空语句,此时就变成只能输入一个数并输出了。

四.变量命名的错误

C语言规定,标示符由字母,数字和下划线“_"组成,它的第一个字母必须是字母或下划线。在C语言中变量的命名不允许出现的情况有以下三种:1.以数字开头进行开头;2.不能包含运算符;3.不能与系统保留字(即关键字重名)。一旦出现这三种情况之一,编译器就会报错。如下图所示:

c2d7b4b0f63f1a59d27a079b57c1c32b.jpeg
img

这里附上C语言中的关键字,即用作专用的定义符,也称为保留字。

2a72496a53e81d2af577f88475e21b99.jpeg
img

作为C语言的初学者,变量的命名往往是简单单调的。而程序员大佬往往用具有特定意义的英文单词进行命名,并形成了一套自己的命名法则:业界目前共有四种命名法则;驼峰命名法,匈牙利命名法,帕斯卡命名法和下划线命名法。其中前三种是比较流行的命名法。1.驼峰命名法是将每个单词(逻辑断点)用大写字母区分开。2.匈牙利命名法通过在变量名前面加上小写字母的符号标识作为前缀,标识出变量的作用域,类型等。3.帕斯卡命名法。与驼峰命名法类似,只不过将开头首字母换成了大写字母。4.下划线命名法是将每个单词(逻辑断点)用下划线隔开。

731665094c5fc714ca8821db6560da2e.jpeg
img

五.忽略大小写字母的区别

c9dd53d56cb04a0bf888edd0d22be5bb.jpeg
img

出现这种情况编译器会将a和A认为是两个不同的变量,因而报错。因此在定义变量和输出变量的同时要注意大小写字母的一致性。因为C会将大写字母和小写字母看成是不同的字符。

六.数据类型的使用错误

例如:我们要输出一个a = 3.1415的情形。如果数据类型使用错误,将得不到我们想要的结果。使用整型,将只输出3。必须使用浮点型float,double,long double。

72211e2ec07a03ee27a9dedd457229e5.jpeg
img
be262526ce9801677604c6bce5196250.jpeg
img

七.“/”运算时,和“%”时计算结果的错误

“/”运算时,参与运算的两个数均为整型时,结果为舍去小数的整型数,例如;

f63ea660f092de48a27903c68b7e0771.jpeg
img

尽管定义了浮点型但是结果却是1.0,而不是我们想要的1.5。为得到1.5的结果,我们必须将3/2改成3.0/2,或者是3/2.0.才能输出1.5的结果。

33da9d1059b9d395addeaecaf72d6545.jpeg
img

如果除数和被除数中有一个为负值,其结果与具体实现有关。例如:“-9/7”在有的系统中计算结果为-2,有的系统计算结果为-1,这是对小数部分的舍入处理不同造成的。“%”要求参与的运算操作数均为整型,计算结果的符号与“%”左侧运算对象的符号相同,如“-9/4"的结果为-1。一旦非整型,编译器将报错。

13a180d576365517d675422fe640ceed.jpeg
img

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

八.字符常量和字符串常量的表示错误

字符变量是用类型符char定义字符变量,字符常量是由一对单引号扣起来的单个字符;字符串常量是用双引号括起来的字符序列,在C中通常以“/”作为结束标志。像下面的字符串"a",实际上包含两个字符'a'和'',这把它们赋给一个变量是不行的。

76aa940fd6f478e4cdb9e387c0c9721c.jpeg
img

九.“=”与“==”的混淆

在C语言中“=”是赋值运算符,而“==”则是关系运算符。命名的不同者也就意味着作用不同和优先级的不同。关系运算符的的优先级高于赋值运算符。

b165e176fbb01a4a2c820d65f5140e26.jpeg
img

if()括号中的语句是进行判断的内容,判断a是否等于4,所以说里面的符号应该用关系运算符“==”而不是赋值运算符“=”。正确的表示如下:

74341e4e2b876b7857cc702c20e4cfed.jpeg
img

十.scanf()括号中忘记加地址运算符“&”

aa1462f86be6debb1d608552e833773a.jpeg
img

这样的书写时不合法的。scanf函数是格式输入函数,它从标准输入设备(键盘)读取输入信息。也就是按照啊a,b在内存的地址将a,b的值存进去,“&a”就是指a在内存中的地址。

十一.间隔符的不注意

scanf()函数一般以空格键,Tab键或Enter键作为分隔符,当格式中字符传中存在非格式字符时,输入时也需要一并输入。例如:

b5e5c752bfced26ce9e7c7c6988a9db7.jpeg
img

应当输入:

8141cf4c40aedf2c67e2670872b48912.jpeg
img

十二.输入数据时结束情况的不熟悉

C语言中,输入数据时,遇到以下3种情况则认为该数据结束:1.遇空格键,Tab键,或Enter键;2.有指定数据长度时,系统自动按长度截取;3.遇非法输入。

十三.输入字符的格式与要求不一致

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

838d7cf2b13373393b1ffb5c11f56d73.jpeg
img

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

十四.输入数据时规定精度

ed46682129d14723d3a9b9151c41c5cb.jpeg
img

输入数据时企图规定精度,这样做在C中是不合法的。

十五.使用switch语句中漏写break语句

例如:打印学生成绩

d2db504914a81d4e3c21f49b4d1715dc.jpeg
img

如果漏写break语句,case只起标号作用,而不起判断作用。也就是假如输入A,就会直接执行到最后一个printf语句,而不会在第一个printf语句执行后截止。因此必须在每个printf语句后加上break.例如:

06e090108cffd1544f6fb7f123e2fcfb.jpeg
img

十六.数组的部分错误

1.数组后面的元素个数应与声明的一致。如果与声明不一致,超出声明后面的数字默认为0。

f2c10d3527f91f9e5748435f63a71398.jpeg
img

2.必须声明元素个数。

94c37406bc92bdd5454d11908292d17b.jpeg
img

十七.忽略了while和do-while语句在细节上的区别

b79fda1246fa85c854759711bf2ac3da.jpeg
img
8d35bc1f630c11094f8398185ea06284.jpeg
img

如图所示,当输入i大于10时二者的结果就不同了。这是因为while循环是先判断后执行,而do-while循环是先执行后判断。对于大于10的数,while语句中编译器不循环循环体,而do-while语句编译器则要执行一次循环体。

十八.定义数组时误用变量

c1ece0e001cec471442714c7d6b2ff45.jpeg
img

数组后面用方括号括起来的是常量表达式,可以包含常量和符号常量。即C不允许对数组的大小作动态定义。

十九.多加了地址运算符“&”

284d794ea493a43313d96d1b3d5b1515.jpeg
img

C语言中,scanf函数中的输入是字符数组名时,就不必在加地址符&。需改为:

c6030c4bdfead2590819ec122c33b16a.jpeg
img

二十.同时定义了形参和函数中的局部变量

7dd28fdc526e812d006936c37abcaaf7.jpeg
img

形参应该在函数体外定义,而局部变量应该在函数体内定义。应改为:

bffb2824160bb5906aba599875cfebc7.jpeg
img

二十一.在定义数组时将定义的“元素个数”误以为是可使的最大下标值

71236805981568f4f0dc6e509c3fe6c7.jpeg
img

C语言规定:定义时用a[10],表示数组有10个元素。其下标值由0开始,所以数组元素a[10]是不存在的。

二十二.二维数组的定义

1.C语言中,不能使用一次方括号来表示二维数组的元素,表示非法的例子如下:

329b93d4d465f7813ff17452907dd739.jpeg
img

2.另外,由于系统不会检查二维数组元素的下标是否越界,以此需要编程人员注意限制下标不要越界。例如:

30acf99e7282e29695b3f1427b3c5d36.jpeg

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

456878492d7aa482060e4c2bf709f4d9.png

715fa0bd9f2168160851073bcbf08849.gif

戳“阅读原文”我们一起进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx配置vue项目500_一个Nginx部署多个vue前端项目总结

摘要:近来接手了一个二次开发的前后端分离模式的项目,其中在前端项目的部署上需要让2个前端项目都部署到一个IP地址和端口下,那么我们这里就要用到Nginx了,接下来我们看看如何在一个Nginx下部署2个前端项目的编译打包2个前端项目执…

【C语言】指针进阶第三站,数组指针!

点击蓝字关注我们数组指针整型指针:指向整型的指针字符指针:指向字符的指针数组指针:指向数组的指针基本概念下面哪个是数组指针呢?指针数组和数组指针的概念很容易混淆,一定要分清楚哦!int *p1[10]; int (…

【C语言】指针进阶第四站:数组/指针的传参问题!

点击蓝字关注我们朋友们,到站啦!指针进阶第四站:传参问题0.引例自定义函数里形参的类型,要和函数调用中传过去的实参类型相对应test函数里的是int类型,我们传过去的参数a也是int类型void test(int n) {} int main() {i…

python做自动化控制postman_python自动化测试入门篇-postman

接口测试基础-postman 常用的接口有两种:webservice接口和http api接口。 Webservice接口是走soap协议通过http传输,请求报文和返回报文都是xml格式。 http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形…

Python3实现红黑树[上篇]

Python3实现红黑树[上篇]由于时间有限,这次只写了红黑树添加节点,关于节点的删除放在下一讲 https://blog.csdn.net/qq_18138105/article/details/105324025。 关于红黑树的介绍,来由,性质和定义,可以看这篇文章&…

web应用程序并发测试_测试并发应用

web应用程序并发测试本文是我们名为Java Concurrency Essentials的学院课程的一部分。 在本课程中,您将深入探讨并发的魔力。 将向您介绍并发和并发代码的基础知识,并学习诸如原子性,同步和线程安全性的概念。 在这里查看 ! 目录…

深入理解存储器层次结构

点击蓝字关注我们1概述对于一个简单的计算机系统模型,我们可以将存储器系统看做是一个线性的字节数组,而 CPU 能够在一个常数时间内访问每个存储器的位置。实际上,存储器系统(memory system)是一个具有不同容量、成本和…

C++的一个指针占内存几个字节?

C的一个指针占内存几个字节?结论: 取决于是64位编译模式还是32位编译模式(注意,和机器位数没有直接关系) 在64位编译模式下,指针的占用内存大小是8字节在32位编译模式下,指针占用内存大小是4字…

【C语言】指针进阶第五站:函数指针!

点击蓝字关注我们函数指针函数也有自己的地址,函数名/&函数名 就是函数的地址1.1基本形式在 数组指针的学习中我们了解到int arr[5]; int (*pa)[5] &arr;//pa是数组指针指针变量pa的类型是int(*)[5]那么函数指针的形式是怎样的呢?void test(cha…

jsp 体检信息查询 绕过用户名验证_一篇彻底搞懂jsp

jsp 实栗 jsp jdbc 实现登录实现思路一个表单页,输入用户登录和密码,然后信息提交到jsp页面进行验证,如果可以服务器跳转到登录成功页,失败,跳转到错误页跳转的时候窗口的URL地址会发生变化代码如下编写登录代码登录&…

C/C++与汇编混合编程有什么好处?

点击蓝字关注我们1 导语 当需要C/C与汇编混合编程时,可以有以下两种处理策略:若汇编代码较短,则可在C/C源文件中直接内嵌汇编语言实现混合编程。若汇编代码较长,可以单独写成汇编文件,最后以汇编文件的形式加入项目中&…

centos 7.6安装java_Hadoop的安装

为了方便后面使用Hadoop的shell命令,我先介绍Hadoop的安装。Hadoop有多种安装模式,这里介绍伪分布式的安装。我测试过Ubutun、Centos和WSL,都可以正常安装Hadoop的所有版本。所有一般不会出现版本对应的问题。Hadoop是基于Java语言进行编写的…

C++软件分析师异常分析工作经验汇总

点击蓝字关注我们最近几年工作当中很大一部分内容是排查软件运行过程中遇到的各种异常,积累了一定的经验,在此给大家分享一下。本文将详细讲述Windows系统中软件异常的分类以及常用的排查方法,给大家提供一个借鉴与参考。1、软件异常的分类常…

java fix_Java中的低延迟FIX引擎

java fix总览 Chronicle FIX是我们的Low Latency FIX引擎和Java数据库。 是什么使它与众不同? 是为Java中的超低GC *设计的。 支持字符串和日期时间的方式可以最大程度地减少垃圾和开销。 可自定义为仅包含您期望的字段。 使用通常在二进制解析器和生成器中使用…

linux 查看防火墙状态_每天五分钟学习Linux系列之 - 系统安全配置

20年IT从业,二哥的团队使用最多的系统就是Linux,开发,运维的小伙伴们都离不开Linux系统,特别是大数据和人工智能领域更是如此,但由于日常工作忙,小伙伴们没有太多成块的时间系统的学习Linux, 并且现版CentO…

C++红黑树模拟实现map和set

点击蓝字关注我们一、红黑树及其节点的设计对于底层都是红黑树的map和set来说,他们之间存在的最大的区别就是:对于set是K模型的容器,而map是KV模型的容器。为了更好的灵活兼容实现map和set,就需要在红黑树以及树节点上进行特别的设…

c语言连接mysql_聊聊数据库MySQL、SqlServer、Oracle的区别,哪个更适合你?

一、MySQL优点:体积小、速度快、总体拥有成本低,开源;支持多种操作系统;是开源数据库,提供的接口支持多种语言连接操作 ;MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地…

绩效工作流_流绩效–您的想法

绩效工作流上周,我介绍了一些有关Java 8流性能的基准测试结果。 你们和gal足够有兴趣留下一些想法,还有哪些可以介绍。 这就是我所做的,这里是结果。 总览 最后一篇文章的序言也适用于此。 阅读它,以找出所有数字为何撒谎&#…

C语言访问MCU寄存器的两种方式

点击蓝字关注我们单片机的特殊功能寄存器SFR,是SRAM地址已经确定的SRAM单元,在C语言环境下对其访问归纳起来有两种方法。1、采用标准C的强制类型转换和指针来实现采用标准C的强制转换和指针的概念来实现访问MCU的寄存器,例如:#define DDRB (*…

08_优先队列

08_优先队列 一、优先队列最大优先队列最大优先队列API设计 最小优先队列最小优先队列API设计最小优先队列代码实现 索引优先队列索引优先队列实现思路索引优先队列API设计索引优先队列代码实现 一、优先队列 :::info 普通的队列是一种先进先出的数据结构,元素在队…