你是不是也有过这样的经历?对着教程敲了半天代码,一编译满屏都是错误提示,盯着屏幕看了半小时也找不出问题在哪;好不容易代码能跑了,结果输出的东西跟预期完全不一样,挠着头想不通哪里出了岔子。别愁,兔子哥今天就把大家常踩的坑都扒出来,看完这篇,至少能少走一半弯路。
『一、这些语法错误,你是不是也常犯?』
语法就像说话的规矩,错一点编译器就听不懂。咱们来看看最容易栽跟头的地方:
- 分号丢了或多了
写 if、for 语句的时候,新手总爱在这里出错。比如:
if (a> b)
printf ("yes") // 这里少了分号,编译器准报错
正确的得加上分号:printf ("yes");
但要是写成 if (a> b);{...},这个分号就多了,程序会把分号当成空语句,后面的代码不管条件对不对都会执行。
- 变量没定义就用
int main ()
{
x = 5; //x 没定义就赋值,肯定错
printf ("% d", x);
}
这时候得先定义变量,比如加上 int x; 才行。 - 字符串用单引号
printf ('% d', a); // 错了,字符串得用双引号
应该写成 printf ("% d", a); 单引号是用来括单个字符的,比如 char c = 'a';
『二、逻辑上绕不过来?多半是踩了这些坑』
语法对了程序也未必能跑对,逻辑错误更让人头疼。
咱们先看个表格,对比下常见的逻辑错误:
| 错误类型 | 错误示例 | 正确写法 |
|---|---|---|
| 赋值当等于 | if(a = 5) | if(a == 5) |
| 循环条件错 | for(i=0;i<10;i--) | for(i=0;i<10;i++) |
| 数组越界 | int a[5]; a[5]=3; | a [4]=3;(下标从 0 开始) |
为啥会把赋值当等于呢?因为写得快的时候,很容易顺手就打一个等号。这个错误编译器不一定会提醒,但程序运行起来结果就乱七八糟。
还有循环条件,比如想让 i 从 0 跑到 9,写成 i-- 的话,一开始 i=0 就满足不了 i<10,循环一次都不执行。这种时候,得盯着循环变量的变化方向多看看。
数组越界也是个大问题,定义 a [5] 其实只能用 a [0] 到 a [4],用 a [5] 的话,程序可能会崩溃,也可能输出些奇怪的数,很难排查。
『三、函数使用时,这些坑别踩』
调用函数的时候,新手常犯的错也不少。
比如调用 scanf 的时候忘了加 &:
int a;
scanf ("% d", a); // 错了,应该是 & a
scanf 需要的是变量的地址,不加 & 的话,程序可能会崩溃。
还有函数声明和定义不一致。比如声明的时候写 int add (int x, int y);,定义的时候却写成 int add (int x, float y),这样编译器也会报错。
『四、怎么才能少踩坑?』
知道了常见错误,怎么避免呢?兔子哥有几个小建议:
- 写代码慢一点,写完一行回头看一眼,特别是分号、引号这些细节。
- 学会用调试工具,一步一步看程序执行过程,变量怎么变的,循环走了几次,很多逻辑错误一看就明白了。
- 遇到错误别慌,编译器的提示虽然有时候看不懂,但仔细找找附近的代码,多半能发现问题。比如提示 “syntax error before '}'”,那可能就是前面少了个分号。
其实学 C 语言嘛,谁没踩过坑呢?兔子哥当年写个简单的排序程序,因为把 i 和 j 弄混了,调了一下午才找出来。关键是踩过的坑要记住,下次别再掉进去。多写多练,慢慢就会有感觉,那些错误一眼就能看出来了。希望这些能帮到正在学 C 语言的你,有啥问题,随时来找兔子哥聊。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~