0
点赞
收藏
分享

微信扫一扫

C语言新手的100个报错解法 已更新11个错误


学习目标

  1. 收藏文章报错可以过来查

[更新数据]

持续更新中…

[发布日期:2020年11月16日 14:55:00]

更新:

暂无

C语言教程

​​C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。​​

第一篇:​​(一)脱离学习误区​​

第二篇:​​(二)C语言没那么难简单开发带你了解流程​​

第三篇:​​(三)轻轻松松理解第一个C语言程序​​

第四篇:​​(四)语言的基本数据类型及变量​​

第五篇:​​(五)C语言的变量、常量及运算​​

第六篇:​​(六)轻轻松松了解C语言的逻辑运算​​

第七篇:​​(七)C语言的循环分分钟上手​​

第八篇:​​(八)了解基本数组还不是那么简单​​

第九篇:​​(九)C语言二维数组与循环嵌套​​

第十篇:​​(十)C语言的指针原来是这样​​

第十一篇:​​(十一)C语言自定义函数真的很简单​​

第十二篇:​​(十二)原来结构体是这么回事​​

第十三篇:​​(十三)socket服务端编写​​

推荐

C语言新手的100个报错解法 已更新11个错误_报错

最近发了C语言的基础教程,得了很多C语言初学者的支持,并且像我询问了很多问题;通过了解大多数的C语言新手的问题得知,大多数的同学都是犯的类似的错误,在此我编写一篇文,大家若出现问题,查看编辑器的提示报错信息,复制关键字后,在该文章搜搜内容,即可查看,若没有查询到可以联系我,我将在此文收录该错误~ 多谢支持~

错误及解决方案如下

错误示例1 报错索引:expected ‘)’ before ‘;’ token

简介:​ 第一个C语言程序“HelloWorld”,在一部分新手学习的时候,经常会出现中英文标点混打情况,在绝大多数编程中,标点符号皆是英文的标点符号。

错误示例:

#include<stdio.h>
int main()
{
printf("HelloWorld");
}

说明:​ 以上示例,在 ​​printf("HelloWorld")​​后的反括号错将英文的反括号")“打成了中文的”)"。新手不注意观察将会极难找到这个错误。

编辑器典型报错提示:​expected ')' before ';' token​

报错解析:​ 由于反括号")“错误打成了”)",导致编译器在解析代码时,发现成对的圆括号少了一半。编译器这时是懵的,所以通过编辑器问你​​expected ')' before ';' token​​;这句报错表示“我需要在在分号前的括号你把他丢哪去了?我找不到了,你要还给我”。其实我们通过仔细观察中文的标点要比英文的标点大一点。

编写建议:​ 编写代码时最好是成对输入括号,不要输入一个括号后接着输入",然后又继续输入HelloWorld;推荐的方式是先输入成对的符号,例如先输入一对英文括号(),随后在一对括号中输入英文的双引号"",接着再往双引号内输入HelloWorld,这时就保证了标点符号的统一。

正确代码:

#include<stdio.h>
int main()
{
printf("HelloWorld");
}

错误示例2 报错索引: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘​attribute​’ before ‘<’ token

简介:​ 依旧使用第一个C语言程序“HelloWorld”,在一部分新手学习的时候,经常会出现在头文件饮用前少打#号的情况;这时候去搜索报错,问题依旧找不到解决办法。

错误示例:

include<stdio.h>
int main()
{
printf("HelloWorld");
}

说明:​ 以上示例,在 ​​include<stdio.h>​​前,少打了#号,由于可能会与某一些语言的“#”号注释记混,就导致了该问题。

编辑器典型报错提示:​expected '=', ',', ';', 'asm' or '__attribute__' before '<' token​

报错解析:​ 由于少打了#号,导致编译器在解析代码时,“胡言乱语”,因为头文件声明并没有太多的内容给予编译器提示,编译器只知道,你在<号前少了什么东西,反正就是错了,编译器自己也很懵。所以通过编辑器问你​​expected '=', ',', ';', 'asm' or '__attribute__' before '<' token​​;这句报错表示“我现在啥都不知道,我只懂你在这个地方搞错了。因为我被你吓到了,我自己都差点胡言乱语”。这个时候可能你上网搜都搜不到对应的解决办法,那是因为这个错,可能错的不错(有点尴尬)。

编写建议:​ 头文件就记住#开头就ok。

正确代码:

#include<stdio.h>
int main()
{
printf("HelloWorld");
}

错误示例3 警告索引: incompatible implicit declaration of built-in function ‘printf’

简介:​ 依旧使用第一个C语言程序“HelloWorld”,在一部分新手学习的时候,经常会漏掉头文件的输入,当然这个问题在某些情况下不会报错,可能会提示一个警告。

错误示例:

int main()
{
printf("HelloWorld");
}

说明:​ 以上示例,没有输入头文件 ​​#include<stdio.h>​​前。

编辑器典型报错提示:​[Warning] incompatible implicit declaration of built-in function 'printf'​

报错解析:​ 由于少打了图问价引用,导致编译器在解析代码时给你了点人情,毕竟头文件知道printf这些熟人是哪个地方的,所以就免为其难的帮了你一下。

编写建议:​ 头文件是代码中使用系统函数的支撑,你需要使用什么函数必须告诉编译器这些东西在哪,如果编译器不熟,它就无法帮你去找到这些东西。

正确代码:

#include<stdio.h>
int main()
{
printf("HelloWorld");
}

错误示例4 报错索引: undeclared (first use in this function)

简介:​ 在编写C语言时,由于C语言是区分大小写的,若没达到设定的标记一致,则会出现错误;例如a与A是两个东西,Age和age也是两个东西。所以在进行程序别写时,一定要注意标记的统一。

错误示例:

#include<stdio.h>
int main()
{
int a=0;
printf("%d",A);
}

说明:​ 以上示例,定义了一个整型变量a,并且初始化值等于0;但是在输出变量a的时候错误的将a写成了A,导致错误的出现。

编辑器典型报错提示:​[Error] 'A' undeclared (first use in this function)​

报错解析:​ 由于将a打成了大写A,编译器在进行编译的时候,编译器发现这个A它是第一次遇见,并不知道是啥,所以就将这个信息告诉了你。

编写建议:​ 这种情况无法避免,通过报错提示是较为容易的解决方式,并且变量命名最好有“意义”,可以表达当前变量的含义。

正确代码:

#include<stdio.h>
int main()
{
int a=0;
printf("%d",a);
}

错误示例5 报错索引: expected declaration or statement at end of input

简介:​ 在编写C语言时,由于C语言是有区块、有层级的,并且内容需要通过一定的符号表示当前层级或块的开始或结束,或者理解为有始有终。若在编写缺少开头标记或结束标记将会产生错误;较为容易出现的错误是结束标记的缺少。

错误示例:

#include<stdio.h>
int main()
{

说明:​ 以上示例,使用helloworld为示例,在helloWorld程序结束后并没有使用花括号进行结尾说明,导致编译器报错。

编辑器典型报错提示:​expected declaration or statement at end of input​

报错解析:​ 由于尾部没有添加结束符,编译器在进行编译的时候,发现尾部没有添加标记,所以就将这个信息告诉了你。那为什么编译器不自动帮你加上去?那是因为编译器编译的时候无法判断你是要做什么,不能从主观角度考虑你编写程序产生的错误,所以报错后只能自己修改。

编写建议:​ 编写代码时最好是成对输入括号,不要输入一个括号或后接着输入,推荐的方式是先输入成对的符号,例如先输入一对英文括号()或{},随后在在其中编写代码内容。

正确代码:

#include<stdio.h>
int main()
{
printf("HelloWorld");
}

错误示例6 报错索引: 无报错

简介:​ 在编写C语言时,使用scanf接收值一定要注意取地址,变量取地址使用取地址符“&”。

错误示例:

#include<stdio.h>
int main()
{
int a=0;
scanf("%d",a);
}

说明:​ 以上示例, 在将至存入变量a时由于没有加取地址,这时编译器不会报错,因为这个地方是地址,变量a为0也可以作为地址,但是会发生不可估计的后果如程序运行时程序崩溃。

编辑器典型报错提示:​无报错,编译顺利​

报错解析:​ 无报错,但是程序运行时将会出现程序崩溃等情况”。

编写建议:​ 熟记语法规则,这是对整体编写规则的不了解。

正确代码:

#include<stdio.h>
int main()
{
int a=0;
scanf("%d",&a);
}

错误示例7 报错索引: 无报错

简介:​ 在编写C语言时,使用scanf接收多个值,在scanf中最好使用显式来表示%d或者其它格式说明符的间隔,若是%d%d默认使用空格隔开。

示例:

#include<stdio.h>
int main()
{
int a=0;
int b=0;
scanf("%d%d",&a,&b);
printf("%d,%d",a,b);
}

说明:​ 以上示例, 输入值时,需要输入一个值使用空格后再输入一个值再按enter键确认。或者输入一个值后按下enter,随后再输入一个值,此时将会给两个变量赋值。

编辑器典型报错提示:​无报错,编译顺利​

报错解析:​ 无报错,但是程序运行时自己不清楚如何赋值将会导致某一值赋值失败”。

编写建议: 推荐使用​​scanf("%d,%d",&a,&b);​​或其他字符间隔。

代码:

#include<stdio.h>
int main()
{
int a=0;
int b=0;
scanf("%d %d",&a,&b);
printf("%d,%d",a,b);
}

错误示例8 报错索引: 无报错

简介:​ 在编写C语言时,使用两个等于号表示判断等于号左右两边的值是否相等;使用一个等于号表示将等于号右边的值赋值给左边。

错误示例:

#include<stdio.h>
int main()
{
int a=0;
if(a=1){
printf("a等于1");
}
}

说明:​ 以上程序if判断中将会一直判断正确,因为并没有使用两个等于号判断,一个等于号是赋值,这个结赋值操作是正确的,将会为Ture。

编辑器典型报错提示:​无报错,编译顺利​

报错解析:​ 无报错,if永远判断正确”。

编写建议:​ 熟悉语法规则。

代码:

#include<stdio.h>
int main()
{
int a=0;
if(a==1){
printf("a等于1");
}
}

错误示例9 报错索引: 无报错

简介:​ 在编写C语言时,使用switch若只想进行常规判断,则必须在每一个case块内,代码结束的末端添加break表示跳出;若未添加,则会导致错误程序一直运行到下一个case块内代码,直到结束或遇见break为止。

错误示例:

#include<stdio.h>
int main()
{
int a=0;
switch(a){
case 0:
printf("等于0\n");
case 1:
printf("等于1\n");
break;
case 2:
printf("等于2\n");
default:
printf("未知\n");
}

}

说明:​ 以上进行case判断后将会运行 ​​printf("等于0\n");​​​以及​​printf("等于1\n");​​代码。

编辑器典型报错提示:​无报错,编译顺利​

报错解析:​ case判断正确后将会一直运行之后未加break的case块代码。

编写建议:​ 熟悉语法规则。

代码:

#include<stdio.h>
int main()
{
int a=0;
switch(a){
case 0:
printf("等于0\n");
break;
case 1:
printf("等于1\n");
break;
case 2:
printf("等于2\n");
break;
default:
printf("未知\n");
}

}

错误示例10 报错索引: called object ‘printf’ is not a function or function pointer

简介:​ 在编写C语言时,勿将系统函数或其它有含义的标记作为变量或其它使用。

错误示例:

#include<stdio.h>
int main()
{
int printf=0;
printf("%d",printf);
}

**说明:**使用了输出函数printf作为变量,这是不允许的。

编辑器典型报错提示:​called object 'printf' is not a function or function pointer​

报错解析:​ 编译器告诉你,你这个东西用错了,在这里不是这样用的,反正编译器自己就是不给你用。就像你进一个学校,校长叫小明,你说你也叫小明为什么不能进。

编写建议:​ 熟悉变量命名规则。

代码:

#include<stdio.h>
int main()
{
int printf_v=0;
printf("%d",printf_v);
}

错误示例11 报错索引: 无报错

简介:​ 在编写C语言时,勿将越界使用数组。

错误示例:

#include<stdio.h>
int main()
{
int a[2]={0,1};
printf("%d",a[3]);
}

**说明:**使用了未确定的区域值,将会造成后果不可控,输出的值也是随机的。

编辑器典型报错提示:​无​

报错解析:​ 无。

编写建议:​ 检查数组,编写数组使用函数,检查长度再赋值。

代码:

#include<stdio.h>
int main()
{
int a[2]={0,1};
printf("%d",a[1]);
}

我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA 

举报

相关推荐

0 条评论