是不是有很多新手朋友写 C 语言代码时,一编译就报错,看着一堆英文提示懵圈?改了半天也找不到问题在哪,最后只能放弃。其实啊,新手常犯的错误就那么几种,只要搞清楚原因,下次就能避开。今天兔子哥就把这些常见错误整理出来,附上演示例代码和解决办法,保证你看完之后,再遇到这些问题能快速搞定,一起往下看吧!
少写分号,编译器跟你急
这应该是新手最容易犯的错了,语句结束忘了加分号,结果编译器报错,还不知道错在哪。
错误示例:
plaintext
#include int main(){printf("Hello World") // 这里少了分号return 0;} 编译的时候会提示 “syntax error before 'return'”,意思是 return 前面有语法错误。这时候你就看看前面的语句,十有八九是少了分号。
解决方法很简单,在 printf 语句后面加个分号就行。记住,C 语言里每个语句结束都得有分号,就像说话要加句号一样。我当初学的时候,光这个错就犯了不下十次,后来在编辑器里写一句就习惯性加个分号,慢慢就改过来了。
变量没定义就用,编译器不认识
有时候脑子里想好了变量名,写代码的时候直接就用了,忘了先定义,编译器肯定不认识啊。
错误示例:
plaintext
#include int main(){num = 10; // 直接用num,没定义printf("%d", num);return 0;} 编译会提示 “'num' undeclared”,说 num 没声明。这时候就得在使用前定义变量,比如加上 “int num;”。
正确代码:
plaintext
#include int main(){int num; // 先定义num = 10;printf("%d", num);return 0;} 不光要定义,还得注意变量名别拼错,比如定义的是 “int number;”,用的时候写成 “nubmer”,也会报同样的错,这种拼写错误特别难发现,得仔细检查。
scanf 用错,输入数据老出错
很多新手用 scanf 接收输入时,经常忘了加取地址符 “&”,结果输入的数据存不进变量里。
错误示例:
plaintext
#include int main(){int age;printf("请输入年龄:");scanf("%d", age); // 少了&printf("你输入的年龄是:%d", age);return 0;} 运行的时候可能不报错,但输入的数据根本存不到 age 里,打印出来的是乱码。这是因为 scanf 需要知道变量在内存中的地址才能存数据,“&age” 就是取 age 的地址。
正确代码是把 “age” 改成 “&age”。不过也有例外,字符串数组名本身就代表地址,用 scanf 输入字符串时不用加 &,这个后面学到数组再慢慢理解。
数组越界,程序崩了都不知道
定义数组的时候指定了大小,比如 “int arr [5]”,意思是数组里有 5 个元素,索引从 0 到 4。但新手经常会访问 arr [5] 甚至更大的索引,造成数组越界。
错误示例:
plaintext
#include int main(){int arr[5] = {1,2,3,4,5};printf("%d", arr[5]); // 索引5越界了return 0;} 这段代码编译可能通过,但运行时可能会崩溃,或者打印出奇怪的数字。因为 arr [5] 已经超出了数组的范围,访问了不该访问的内存。
解决方法就是确保访问数组时,索引小于数组的大小。循环遍历数组时,尤其要注意循环条件,比如 “for (i=0;i<5;i++)” 而不是 “i<=5”。
函数调用前没声明,编译器找不到
如果函数定义在 main 函数后面,调用之前又没声明,编译器就会说找不到这个函数。
错误示例:
plaintext
#include int main(){print_hello(); // 调用print_hello,但没声明return 0;}void print_hello(){printf("Hello");} 编译会提示 “implicit declaration of function 'print_hello'”。解决方法有两种:要么把函数定义放到 main 函数前面,要么在 main 函数前面声明一下这个函数,比如加上 “void print_hello ();”。
我个人更喜欢在前面声明,这样 main 函数在前面,整个程序的结构更清晰。
注释符号用错,代码被注释掉
用 “/* /” 注释多行代码时,如果忘了加结束符号 “/”,后面的代码会被当成注释,导致编译错误。
错误示例:
plaintext
#include int main(){/* 这是一段注释,忘了加结束符printf("Hello");return 0;} 这时候 printf 和 return 语句都被当成注释了,编译会提示 “expected declaration or statement at end of input”。解决方法就是在注释结束的地方加上 “*/”。
还有些新手用 “//” 注释多行,虽然现在很多编译器支持,但严格来说 “//” 只注释一行,最好别这么用,养成用 “/* */” 注释多行的习惯。
避坑小技巧,新手必备
- 写代码慢一点,每写一行检查一下,特别是分号、括号这些细节。
- 编译器报错时,从第一个错误开始改,有时候后面的错误是前面引起的。
- 不确定的语法,比如 scanf 要不要加 &,马上翻笔记或教程,别凭感觉写。
- 多调试,遇到结果不对的情况,一步步打印变量的值,看哪里出了问题。
其实这些错误,每个学 C 语言的人都犯过,包括兔子哥在内。关键是犯过之后要记住,下次别再犯。刚开始慢点没关系,练得多了,自然就熟练了。写代码就像骑自行车,摔几次跤,掌握了平衡,就越来越顺了。希望这些能帮到你,有啥解决不了的错误,也可以来问兔子哥,看到都会回的。
标签: 十有八九 Hello World
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~