if常见问题解析

作者在 2011-08-11 16:20:40 发布以下内容
1.if中错误使用空语句
/*
时间:2011年8月11日15:41:26
目的:注意在使用if时常见的一种错误:空语句
*/

# include <stdio.h>

int main(void)
{
    if (2 > 3);                 //这里多了一个分号;实际上这一个分号被认为是一条空语句
    printf("AAAA\n");        //如果没有哪个分号,这条语句应该因为表达式为假而不执行
    printf("BBBB\n");        //那么不出错的时候最后会输出BBBB

/*
这里带有空语句的代码可写成下面的形式,更好理解
if (2 > 3)
;                            //由于表达式2>3为假,所以这条空语句不执行。不过这条语句的出现不破坏C语言的语法,所以编译不会报错
printf("AAAA"\n);            //而由于if只能控制一条语句,所以这条语句肯定会执行。而原本正确的代码中,这条语句会因为表达式为假而不执行
printf("BBBB\n");            //所以最后AAAA和BBBB都会被输出
*/

return 0;
}

/*
在VC++6.0中的输出结果为:
————————————
AAAA
BBBB
Press any key to continue
————————————
*/
 
2. if...else...中错误使用空语句
/*
时间:2011年8月11日16:57:09
目的:测试if的第2种常见错误,在if...else...中错误使用空语句 的效果
*/

# include <stdio.h>

int main(void)
{
    if (2 < 3);            //跟上一个例子一样,这里多了一个分号,也就是多加了一个空语句,由于2<3为真,空语句被执行,但不会产生什么输出结果
    printf("AAAA\n");    //由于if只能控制一个语句,所以这条语句肯定执行,应该输出AAAA
    else                //上面的代码符合语法,但当编译到这一句时,else找不到与之匹配的if,会报错
    printf("BBBB\n");
return 0;
}

/*
这段代码在编译时会报错

--------------------Configuration: if常见错误解析2—if else中的空语句 - Win32 Debug--------------------
Compiling...
if常见错误解析2—if else中的空语句.cpp
F:\课程\郝斌老师C语言\上机\if常见错误解析2—if else中的空语句.cpp(6) : warning C4390: ';' : empty controlled statement found; is this the intent?
F:\课程\郝斌老师C语言\上机\if常见错误解析2—if else中的空语句.cpp(7) : error C2181: illegal else without matching if
执行 cl.exe 时出错.

if常见错误解析2—if else中的空语句.obj - 1 error(s), 0 warning(s)

*/
 
3. if...else if...else中如果有多个表达式为真的话,会执行几个语句?
/*
时间:2011年8月12日9:43:13
目的:测试第3种if常见的问题,if...else if...else中好几个表达式为真的话,会执行几个语句?
*/

# include <stdio.h>

int main(void)
{
    if (3 > 2)
        printf("AAAA\n");        //表达式3>2为真,这条语句被执行,输出AAAA
    else if (3 > 1)                //表达式3>1也为真,那么下面的语句会不会也执行呢?
        printf("BBBB\n");        //实际上,当if的表达式为真时,就不存在否则的问题了,后面的代码都不会运行,所以,这里不会显示BBBB
    else
        printf("CCCC\n");

return 0;
}

/*
在VC++6.0中的输出结果为:
————————————
AAAA
Press any key to continue
————————————
总结
if (表达式A)
    语句A
else if (表达式B)
    语句B
else
    语句C
当表达式A和表达式B都为真时,只执行语句A
*/
 
4. if...else if...else中缺少最后的else会怎样
/*
时间:2011年8月12日10:06:18
目的:测试第4种if常见的问题,if...else if...else中缺少最后的else会怎样
*/

# include <stdio.h>

int main(void)
{
    if (3 < 2)
        printf("AAAA\n");        
    else if (3 < 1)                
        printf("BBBB\n");        
//    else                                    //漏了这里的else,语法上没问题,编译起来不会报错
//        printf("CCCC\n");                    //但在这里会造成最后什么输出都没有

return 0;
}

/*
在VC++6.0中的输出结果为:
————————————
Press any key to continue
————————————
总结
if...else if...else结构中如果漏了最后的else,语法没错误,但逻辑有漏洞
*/
 
5. if...else if...else...结构中,else不能跟表达式,否则编译会报错
/*
时间:2011年8月12日10:37:11
目的:注意第5种if常见问题,if...else if...else...结构中,else不能跟表达式,否则编译会报错
*/

# include<stdio.h>

int main(void)
{
    if (3 < 2)
        printf("AAAA\n");
    else if (3 < 1)
        printf("BBBB\n");
    else (3 > 1)                //这里else后面跟表达式语法上是错误的
        printf("CCCC\n");

return 0;
}

/*
编译时会报错:
--------------------Configuration: if常见问题解析5 - Win32 Debug--------------------
Compiling...
if常见问题解析5.cpp
f:\课程\郝斌老师c语言\上机\if常见问题解析5.cpp(10) : error C2146: syntax error : missing ';' before identifier 'printf'
执行 cl.exe 时出错.

if常见问题解析5.obj - 1 error(s), 0 warning(s)
*/
 
6. if...else if...else...结构中,else后跟表达式,然后再加一个分号结果会怎么样?
/*
时间:2011年8月12日11:43:38
目的:测试第6种if常见问题,if...else if...else...结构中,else后跟表达式,然后再加一个分号结果会怎么样?
*/

# include<stdio.h>

int main(void)
{
    if (3 < 2)
        printf("AAAA\n");
    else if (3 < 1)
        printf("BBBB\n");
    else (3 > 1);                //这里else后面跟表达式又加了分号。
        printf("CCCC\n");

/*
这段代码改写一下会更好理解
    if (3 < 2)
        printf("AAAA\n");
    else if (3 < 1)
        printf("BBBB\n");
    else
        (3 > 1);                //加了分号后,原来的表达式实际是以语句的形式出现,对于else结构来说符合语法,只是没有什么意义,不会有输出
        printf("CCCC\n");        //这条语句与if...else if...else...结构没有关系,一定会被执行,最后输出CCCC
*/

return 0;
}

/*
在VC++6.0中的输出结果为:
————————————
CCCC
Press any key to continue
————————————
总结
这种情况虽然逻辑错误,但符合语法,不会报错
更可怕的是,如同代码中的例子,虽然编写错误,得到的结果确实想正确的
所以这种错误非常隐蔽,一定要小心
*/
郝斌视频笔记 | 阅读 1422 次
文章评论,共0条
游客请输入验证码
最新评论