作者在 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
————————————
*/
时间: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)
*/
时间: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
*/
时间: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,语法没错误,但逻辑有漏洞
*/
时间: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)
*/
时间: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
————————————
总结
这种情况虽然逻辑错误,但符合语法,不会报错
更可怕的是,如同代码中的例子,虽然编写错误,得到的结果确实想正确的
所以这种错误非常隐蔽,一定要小心
*/
时间: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
————————————
总结
这种情况虽然逻辑错误,但符合语法,不会报错
更可怕的是,如同代码中的例子,虽然编写错误,得到的结果确实想正确的
所以这种错误非常隐蔽,一定要小心
*/