关于C语言一些不起眼的小错误

<第一>

报错/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[])

2main函数内部调用的时候,指针位置记得应写为--->     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]的赋值即可.

    

    

    

    





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值