C基础系列教程11——常见错误总结

该系列文章内容可能来源我本人或者zhrmoe(他的主页:http://zhrmoe.iflab.org/)的编写。文章如果有错误欢迎批评指正,谢谢!转载请注明来自本站,另外,本系列教程中的代码建议初学者自己手打一遍,不要直接复制(由于某些奇怪的原因可能会导致你复制的代码出现错误!相信自己的双手吧=-=
在这里总结一些初学者常见错误,建议在考试前看一遍。

//从头写起吧,在最开始的预处理语句。

//-----------------------------------------------------------------------

//正确形式:

#include<stdio.h>

#include"stdio.h"

#include<math.h>

#include<math.h>

//错误形式:

//1.拼写错误

#includ<stdio.h>

include<studio.h>

//2.忘记加入要使用的头文件。比如math.h或者string.h

//注意:之后代码之前都没有写头文件

//-----------------------------------------------------------------------

//正确形式:

int main() {



    
return 0;

}

//错误形式:

//1.拼写错误

int mian() {



    retrun 
0;

}

//2.缺少必要的空格或分号

intmian() {



    retrun0

}

//3.括号不成对出现(一个单独的括号会很伤心的~)

int mian() {



    retrun 
0;

//---------------------------------------------------------------------- -

//正确形式:

    int a, b, c;

    
int a = 0, b = 0, c = 0;

    
int a[50];

    
int a[50] = { 0 };

    
double t;

    
double t = 0;

    
char c = 'a';

    
char *s = "abcdefg";

//错误形式:

//1.符号使用错误,编写过程不易察觉。。

    int a; b; c;

    
int a = 0; b = 0, c = 0;

    
char c = "a";

    
char *s = 'abcdefg';

//2.定义数组使用变量

    int i = 50;

    
int a[i];

//---------------------------------------------------------------------- -

//正确形式:

int main() {

    
int *a = NULL;

    
int b = 0;

    a = &b;

    
return 0;

}

//错误形式:

//1.星号使用错误,切记指针的定义和调用之间的不同

int main() {

    
int *a;

    
int b = 0;

    *a = &b;

    
return 0;

}

//2.野指针的初始化, NULL必须大写

int main() {

    
int *a = null;

    
return 0;

}

//---------------------------------------------------------------------- -

//正确形式:

int main() {

    
int a = 1;

    
double b = 2.1;

    
char c = 'a';

    
char *s = "abcdefg";

    
int *p = NULL;

    p = &a;

    printf(
"%d", a);

    printf(
"%d", *p);

    printf(
"%.2f", b);

    printf(
"%c", c);

    printf(
"%c", *s);

    printf(
"%s", s);

    printf(
"%p", p);



    scanf(
"%d", &a);

    scanf(
"%lf", &b);

    scanf(
"%c", &c);

    scanf(
"%s", s);

    
return 0;

}

//错误形式:

//1.格式化文本中的类型与变量类型或数量对应错误

//可以通过编译,但结果可能与预期结果不一致

int main() {

    
int a = 1;

    
double b = 2.1;

    
char c = 'a';

    
char *s = "abcdefg";

    
int *p = NULL;

    p = &a;

    printf(
"%c", a);

    printf(
"%*.*f"3, b);

    scanf(
"%lf", &a);

    
return 0;

}

//2.scanf不加或多加取址符&

int main() {

    
int a = 1;

    
int *p = NULL;

    p = &a;

    scanf(
"%d", a);

    scanf(
"%d", &p);

    
return 0;

}

//---------------------------------------------------------------------- -

//正确形式:

int main() {

    
int a, b, c;

    scanf(
"%d %d %d", &a, &b, &c);

    
if (a == b) {

        
//do something

    } else if (b <= c) {

        
//do something

    } else if (c >= a && c <= b) {

        
//do something

    } else {

        
//do something

    }

    
return 0;

}

//错误形式:

//1.逻辑运算符号错误, 引起程序逻辑分支出现问题,得不到正确结果

int main() {

    
int a, b, c;

    scanf(
"%d %d %d", &a, &b, &c);

    
if (a = b) {

        
//do something

    } else if (b <= c) {

        
//do something

    } else if (a <= c <= b) {//注意!这种写法是错的!!

                                //do something

    } else {

        
//do something

    }

    
return 0;

}

//2.if else 级联写法错误,导致编译失败或者程序逻辑错误

//可能出现多余大括号,多余分号。缺少空格,或缺少分号

int main() {

    
int a, b, c;

    scanf(
"%d %d %d", &a, &b, &c);

    
if (a == b) {

        
//do something

    }elseif(b <= c) {

        
//do something

    } else if (c >= a && c <= b); {

        
//do something

    } else {

        
//do something

    };

    
return 0;

}



//---------------------------------------------------------------------- -

//正确形式:

int add(int x, int y);

int padd(int *x, int *y);

int main() {

    
int a = 1, b = 2;

    
int *pa, *pb;

    pa = &a;

    pb = &b;

    printf(
"%d\n", add(a, b));

    printf(
"%d\n", padd(&a, &b));

    printf(
"%d\n", padd(pa, pb));

    
return 0;

}



int add(int x, int y) {

    
return x + y;

}



int padd(int *x, int *y) {

    
return *x + *y;

}

//错误形式:

//1.参数传递类型错误。

int add(int x, int y);

int padd(int *x, int *y);

int main() {

    
int a = 1, b = 2;

    
int *pa, *pb;

    pa = &a;

    pb = &b;

    printf(
"%d\n", add(&a, &b));

    printf(
"%d\n", padd(a, b));

    printf(
"%d\n", padd(&pa, &pb));

    
return 0;

}



int add(int x, int y) {

    
return x + y;

}



int padd(int *x, int *y) {

    
return *x + *y;

}

//2.声明形式和实际形式不符

void add(int *x, int y);

double padd(int *x, int *y);

int main() {

    
int a = 1, b = 2;

    
int *pa, *pb;

    pa = &a;

    pb = &b;

    printf(
"%d\n", add(a, b));

    printf(
"%d\n", padd(&a, &b));

    printf(
"%d\n", padd(pa, pb));

    
return 0;

}

float add(int x, int y) {

    
return x + y;

}

void padd(int *x, int *y) {

    
return *x + *y;

}

//---------------------------------------------------------------------- 

//通过考试不是目的,提高自己的程序编写能力才是重要的~

//如果你看到了这里,感谢你的耐心!

//记的,细节决定成败。。

One thought

发表评论

电子邮件地址不会被公开。 必填项已用*标注

53 − 47 =