<第一>
报错/Users/zhao95outlook.com/Desktop/练习/lianxi/main.c:55:14: Expression result unused
Expression result unused 标识符的结果没有被使用.
情况:在for的循环中使用了 *pl++;
原因:自增优先级扰乱了编程顺序,首先执行了pl++,表示地址自增,就错了.
修正:(*pl)++;
或者:*pl+=1;
<第二>
void panduan(int *pz,int *pf,int *pl,float arr[]);
需要制作个函数,需要多个返回值,或者没有返回值,直接执行程序的顺序进行执行的.使用void函数来开始.
在外部的函数void内声明指针可以指向主函数main所需要接受的值.
主函数在调用函数的时候有需要向函数内赋值的可以在函数的()中定义类型变量名.如上边括号中的(.......float arr[])
情况:在调用函数的时候,
1主函数前边记得挂调用的函数头声明 --->void panduan(int *pz,int *pf,int *pl,float arr[])
2在main函数内部调用的时候,指针位置记得应写为---> panduan(&xxx,&xxx,&xxx,arr);
注意:调用函数内部使用数组的,调用时只打数组的名称,例如:arr.不可以打arr[].
<第三>
例子:
if (arr[i]) > 0 {
(*pz)++;
}
报错:/Users/zhao95outlook.com/Desktop/练习/lianxi/main.c:47:21: Expected expression
Expected expression 预期的表达式 (标红) >号下边有小箭头支出错误.
原因:if括号后边的 >0 没有用上.
修正:if (arr[i] >0){
(*pz)++;
}
<第四>
例子: 代码部分片段->
void panduan(int *pz,int *pf,int *pl,float arr[]){
int main(){ ----->在这里标红报错!!!
报错:/Users/zhao95outlook.com/Desktop/练习/lianxi/main.c:34:11: Function definition is not allowed here
Function definition is not allowed here
函数 定义 不允许 在这
原因:上一个函数头在引用的时候,结尾有一个大括号 { ,表示该函数没有结束.系统找到下一个函数main,这是一个主函数
所以报错了,认为主函数不应再这里定义,
修正:只要加上前边那个函数的大括号就好了.
注意:以后遇到这个报错,就找上一个函数的大括号是否有一个完整的结束!
<第五>
报错:Thread1:EXC_Arithmetic(code=EXC_1386_DIV,subcode=0x0)
意思:路线崩溃()在网上找了一些资料没有一个明确翻译,按照理解来讲就是程序崩了吧...真是简单粗暴的解释~
实际应用的代码:
#include <stdio.h>
int main(){
for (int i =1; i < 1000; i++) {
int sum =0;
for (int k =0; k < i; k++) {
if (i % k ==0) { ------>出现报错!subcode=0x0
sum += k;
}
}if (i == sum) {
printf("%d",i);
}
}
}
这一是一道比较简单的C语言入门编程题,题目是打印1000以内的真因数.算法中使用到了%摸运算.模运算及除法运算中
是不可以把0作为一个除数的.这个算法导致了程序崩溃.
注意:当然这是一个小小的错误,初学者会犯,在后期繁多的代码集合开发时出现了几率也不少,虽然很不起眼,但是对于一定经验的程序员
也偶尔会浪费很多的时间来排查.
解决方案:当发现程序出现Thread1:EXC_Arithmetic(code=EXC_1386_DIV,subcode=0x0)报错时,首先不要找指针的错误而是先find代码中全部的%和/运算.查找除数是否为零或间接为零的情况,这样就相信会给程序员节省出不少的排查时间啦!~
<第六>
带有for循环的程序结果错误
#include <stdio.h>
void panduan(int *pz,int *pl,int *pf,float shuzu[]);
int main(){
int z,f,l;
float arr[5];
for (int i =1; i <= 5; i++) { ----->问题点
printf("输入吧小伙\n");
scanf("%f",&arr[i]);
}
panduan(&z,&l,&f,arr);
printf("%d %d %d \n",z,l,f);
return0;
}
void panduan(int *pz,int *pl,int *pf,float shuzu[]){
for (int i =0; i < 5; i++) {
if (shuzu[i] <0) {
(*pf)++;
}
if (shuzu[i] ==0) {
(*pl)++;
}
if (shuzu[i] >0) {
(*pz)++;
}
}
}
这是个一道C语言的初级编程题,题目是输入5个数字,并引用函数来判断5个数有多少个数大于0,小于0和等于零.
情况:在这程序中输入了5个正数或者5个负数,显示结果都会显示输入了一个0;
原因:在for循环中i的初始值设置为1,导致在循环向数组输入数据时漏掉了arr[0],则这个元素的初始化为0,所以不管输入几个正数或负数都会首先默认输入了一个0.
解决方案:把for循环中的 i 设置为int i =0;不使在循环输入中漏掉数组[0]的赋值即可.