黑马程序员技术交流社区

标题: 简单的C语言代码问题,求解 [打印本页]

作者: chernyog    时间: 2014-10-18 14:20
标题: 简单的C语言代码问题,求解
int a = -1;
if(a<0)
        int b = 0;
printf("a=%d\n",a);
最近学基础班的C语言,这行代码为啥会报错呢?想不通,求大神解答。
作者: duzhong    时间: 2014-10-18 15:16
你把报的什么错也发上来啊,或者把全部代码发上来,这样我是看不出来有什么错。
作者: zhougdong2007    时间: 2014-10-18 15:21
你输入标点符号的时候注意是中文输入还是英文状态下输入的看看
作者: 赵志文    时间: 2014-10-18 15:39
作用域不明确
作者: chernyog    时间: 2014-10-18 17:49
duzhong 发表于 2014-10-18 15:16
你把报的什么错也发上来啊,或者把全部代码发上来,这样我是看不出来有什么错。 ...

就这些代码,错误截图上传了。

C语言变量错误.png (21.29 KB, 下载次数: 46)

C语言变量错误.png

作者: chernyog    时间: 2014-10-18 17:51
赵志文 发表于 2014-10-18 15:39
作用域不明确

就相当于在 if 语句里面申明了一个变量,感觉没什么问题,说得通,但是确实报错了,有点纠结。
作者: chernyog    时间: 2014-10-18 17:52
zhougdong2007 发表于 2014-10-18 15:21
你输入标点符号的时候注意是中文输入还是英文状态下输入的看看

这个都是英文状态下的标点符号,之前因为标点犯过很多莫名其妙的错,不过谢谢提醒哦^_^。
作者: Lxy    时间: 2014-10-18 18:02
if(a<0)
        int b = 0;
错在不能在if语句中定义变量
如果把int b = 0;改成{int b = 0};可以
作者: chernyog    时间: 2014-10-18 18:04
Lxy 发表于 2014-10-18 18:02
if(a

按照你说的,成功了。但是if里面如果只有一句的话,就可以省略大括号,还是有点纠结,也许是编译器的问题吧。谢谢啦!
作者: Lxy    时间: 2014-10-18 18:08
chernyog 发表于 2014-10-18 18:04
按照你说的,成功了。但是if里面如果只有一句的话,就可以省略大括号,还是有点纠结,也许是编译器的问题 ...

李杰明老师的基础视频中有讲到,你可以看看!
作者: 哈利梅    时间: 2014-10-18 18:11
这个其实后面的课程会讲的,主要是作用域不明确,正确的应该是
int a = -1;
if(a<0)
{  
    int b = 0;
    printf("a=%d\n",a);
}
这样看的就比较清楚了,因为如果if后面不加大括号的话,系统会默认紧挨着if的一句为if的内容,但是这个时候问题又来了,因为系统是这样默认的,但是有有一个问题,因为int b=0;这一句也是在main()函数中的,所以b其实按道理来说,b这个变量属于main(),但是b又属于了if(原因上面说了),所以这就造成了冲突,故系统报错,千万不要忘了写大括号,很重要的哈!!!!希望对你有用~
作者: chernyog    时间: 2014-10-18 18:11
Lxy 发表于 2014-10-18 18:08
李杰明老师的基础视频中有讲到,你可以看看!

好的,谢谢。
作者: 易拉罐    时间: 2014-10-18 18:15
不用省略最好,就标准的语法来写,这样别人看的时候也很明白。如果不加大括号,在xcode5中编译不能通过,很可可能是编译器的问题。
作者: chernyog    时间: 2014-10-18 18:17
哈利梅 发表于 2014-10-18 18:11
这个其实后面的课程会讲的,主要是作用域不明确,正确的应该是
int a = -1;
if(a ...

嗯嗯,明白了,讲的很详细,谢谢啦!^_^
作者: LeeWong    时间: 2014-10-18 23:13
视频里面有降到作用域不明确的问题,好好看视频慢慢来
作者: 八寒地狱    时间: 2014-10-19 00:47
错误慢慢积累就不会错了
作者: chernyog    时间: 2014-10-19 08:53
嗯,看看视频,注意一下细节点。
作者: 兵临城下    时间: 2014-10-19 09:56
if语句之后,不管内容长短,都加上大括号,就不会有错误了
作者: chernyog    时间: 2014-10-19 23:11
兵临城下 发表于 2014-10-19 09:56
if语句之后,不管内容长短,都加上大括号,就不会有错误了

嗯嗯,学习了。
作者: 736010695    时间: 2014-10-19 23:30
原因是作用域不明确,你在if语句下定义了一个变量b,按理讲这个变量只在if结构循环下才作用,但是由于你没加大括号,看上去这个变量b从定义开始一直到所有代码结束都有作用的,用MJ的话说:计算机室很笨的,它怎么知道你定义的这个b变量是给if语句,还是给整体main函数的
作者: chernyog    时间: 2014-10-20 22:43
736010695 发表于 2014-10-19 23:30
原因是作用域不明确,你在if语句下定义了一个变量b,按理讲这个变量只在if结构循环下才作用,但是由于你没加 ...

嗯,学习了。
作者: ench44    时间: 2014-10-20 22:48
以后你可能会学习swift.....swift里面所有的流程控制语句,必须要有"{}"
作者: csf62615    时间: 2014-10-21 00:48
本帖最后由 csf62615 于 2014-10-21 00:52 编辑

我以前也有这个问题
作者: chernyog    时间: 2014-10-21 13:33
736010695 发表于 2014-10-19 23:30
原因是作用域不明确,你在if语句下定义了一个变量b,按理讲这个变量只在if结构循环下才作用,但是由于你没加 ...

嗯嗯,学习了,谢谢!
作者: 邵起    时间: 2014-10-21 22:36
编译器只通过大括号来识别作用域,理论上说新变量作用域在if语句块内,但编译器又只认大括号,所以会报错。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2