A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chernyog 中级黑马   /  2014-10-18 14:20  /  2425 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a = -1;
if(a<0)
        int b = 0;
printf("a=%d\n",a);
最近学基础班的C语言,这行代码为啥会报错呢?想不通,求大神解答。

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

24 个回复

倒序浏览
你把报的什么错也发上来啊,或者把全部代码发上来,这样我是看不出来有什么错。
回复 使用道具 举报
你输入标点符号的时候注意是中文输入还是英文状态下输入的看看
回复 使用道具 举报
作用域不明确
回复 使用道具 举报
duzhong 发表于 2014-10-18 15:16
你把报的什么错也发上来啊,或者把全部代码发上来,这样我是看不出来有什么错。 ...

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

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

C语言变量错误.png
回复 使用道具 举报

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

这个都是英文状态下的标点符号,之前因为标点犯过很多莫名其妙的错,不过谢谢提醒哦^_^。
回复 使用道具 举报
Lxy 中级黑马 2014-10-18 18:02:13
8#
if(a<0)
        int b = 0;
错在不能在if语句中定义变量
如果把int b = 0;改成{int b = 0};可以
回复 使用道具 举报

按照你说的,成功了。但是if里面如果只有一句的话,就可以省略大括号,还是有点纠结,也许是编译器的问题吧。谢谢啦!
回复 使用道具 举报
Lxy 中级黑马 2014-10-18 18:08:03
10#
chernyog 发表于 2014-10-18 18:04
按照你说的,成功了。但是if里面如果只有一句的话,就可以省略大括号,还是有点纠结,也许是编译器的问题 ...

李杰明老师的基础视频中有讲到,你可以看看!
回复 使用道具 举报
这个其实后面的课程会讲的,主要是作用域不明确,正确的应该是
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(原因上面说了),所以这就造成了冲突,故系统报错,千万不要忘了写大括号,很重要的哈!!!!希望对你有用~
回复 使用道具 举报
Lxy 发表于 2014-10-18 18:08
李杰明老师的基础视频中有讲到,你可以看看!

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

嗯嗯,明白了,讲的很详细,谢谢啦!^_^
回复 使用道具 举报
视频里面有降到作用域不明确的问题,好好看视频慢慢来
回复 使用道具 举报
错误慢慢积累就不会错了
回复 使用道具 举报
chernyog 来自手机 中级黑马 2014-10-19 08:53:06
17#
嗯,看看视频,注意一下细节点。
回复 使用道具 举报
if语句之后,不管内容长短,都加上大括号,就不会有错误了
回复 使用道具 举报
兵临城下 发表于 2014-10-19 09:56
if语句之后,不管内容长短,都加上大括号,就不会有错误了

嗯嗯,学习了。
回复 使用道具 举报
原因是作用域不明确,你在if语句下定义了一个变量b,按理讲这个变量只在if结构循环下才作用,但是由于你没加大括号,看上去这个变量b从定义开始一直到所有代码结束都有作用的,用MJ的话说:计算机室很笨的,它怎么知道你定义的这个b变量是给if语句,还是给整体main函数的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马