好像编译都通不过呀
int foo(void){
if (x > 0); //line 1
printf("x is positive.\n");// line 2
}
int main(void){
foo();
}
把line1 和line2 直接放在main里面也通不过。
变量x都没定义能编译过么
asdfasd
作者的意思是想说if语句后面不能直接跟分号吧~,我是菜鸟,以前犯过这个错误,for后面也直接跟过分号~
还是我。。。你的意思难道是想输出 "-1 is positive" ??
“作者的意思是想说if语句后面不能直接跟分号吧~” 这个是正解。
鄙人之见: if (x > 0 )后面的;号是个null statement 由于int x = -1,so (x > 0) is false , 即执行null statement后面的printf语句 输出应该是-1 is a positive.
#include <stdio.h>
void foo(int x)
{
if (x > 0)
printf("x is positive.\n");
}
int main(void)
{
int x = -1;
foo(x);
return 0;
}
if句后没加分号 一楼格式的改良 这个应该对了吧本节中,您提到了“语句块中也可以定义局部变量”。 但是,实际使用中,有些编程环境中,所有的变量定义都必须在程序的执行语句前定义。而不能想VC下面那样,编程过程中,需要了再定义。 不知这个问题如何理解?是VC中允许例外吗?C标准中怎么规定的呢?
这个问题我已经解释清楚了。你回去重看第3章。
我被忽悠了,没看见分号。
“作者的意思是想说if语句后面不能直接跟分号吧~” 怎么不能跟分号,跟分号只是表示if分支里没做任何操作而已。 这个应该输出x is a positive.
这个题目有一定的迷惑性,因为最后的一句话printf的执行并不受if语句的影响,if语句后面有个“;”,就表明控制语句的后面是一个空语句!
34 main ()
35 {
int x;
x=-1;
if (x>0) {
/*code */
}
printf("x is a positive");
因为控制语句后面返回空语句
返回的结果也是正确的。(只是不是我们想要的:-)! main ()
{
int x;
x=-1;
if (x>0) {
/*code */
}
printf("x is a positive");
}
不好意思!因为网速。上面排版 -_-!if 语句多了个分号。
if 后面可以跟分号, 但是跟了分号后就没什么作用了, 而且导致结果错误.
程序段编译能通过,执行也不出错,但是执行结果不正确,是一个语义错误"if (x > 0);"但是这并没有违背c的规则,所以编译可以通过。
分号应该是有作用的,表示一条空语句,
其实是老师的排版缩进迷惑了大家,
int x = -1;
if (x > 0)
{
;
}
printf("x is positive.\n");第三类错误是逻辑错误和语义错误。如果程序里有逻辑错误,编译和运行都会很顺利,看上去也不产生任何错误信息,但是程序没有干它该干的事情,而是干了别的事情。当然不管怎么样,计算机只会按你写的程序去做,问题在于你写的程序不是你真正想要的,这意味着程序的意思(即语义)是错的。找到逻辑错误在哪需要十分清醒的头脑,要通过观察程序的输出回过头来判断它到底在做什么。
新手ds
int x == -1;
int x == -1;
if (x>0)
printf("...");
可以这样改吗
这样改了之后,由于判断条件不成立,输出的仍是x is positive
if后面有一个分号,下面的语句又往前缩进了。。考眼力。。。
;是C语言的一个操作符,它的作用告诉程序先把目(;)前的工作做完,再去做后面的事情。 强调的这一点,就不容易犯类似的错误了。
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!