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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 jy00889669 于 2015-10-10 14:44 编辑

例如
int a;
printf("输入一个数");
scanf("%d",&a);
if(a = 3) {
printf(“表达式1");
}
if(a !=3) {
printf(“表达式2");
}

如上,如果第一个if语句中,小括号内把3赋值给a,那么,是不是会影响下一个if语句的a的值呢?
无论输出什么值,都是同事打印出表达式1,和表达式2,对用户输入的值无影响。
我可不可以这样理解:if语句小括号内如果是变量赋值,那么作用域是在从它赋值开始的到以下的程序都有影响。而不仅仅是作用在第一个if语句中。


6 个回复

倒序浏览
第一个if时赋值表达式,所以第一个一定执行,第二个一定不执行
回复 使用道具 举报
改一下,把a=3改成,a==3就可以了。在Xcode上,if(a=3),有错误提示,会提示你改成==
回复 使用道具 举报
羊口羊口羊 发表于 2015-10-10 19:57
改一下,把a=3改成,a==3就可以了。在Xcode上,if(a=3),有错误提示,会提示你改成== ...

好的,谢谢。
但是,我的疑问是第一个if语句如果赋值,作用域是不是只作用在第一个if语句中呢,还是以下的语句有会有影响?求解
回复 使用道具 举报
超の 发表于 2015-10-10 17:30
第一个if时赋值表达式,所以第一个一定执行,第二个一定不执行

是的,a = 3,所以第二个if语句不会输出表达式2。
这是不是说明第一个if语句赋值变量会影响下面的变量呢?
回复 使用道具 举报
本帖最后由 布鲁兹老爷 于 2015-10-11 00:41 编辑

你这个是作用域问题啊,很简单,你的变量a是最前面定义的。后面没在任何代码块中重新定义一个a,所以你这个a就会贯穿整个main函数。

第一个if里是赋值语句,a = 3 而不是int a =3,很明先影响了第二个if的判断。第二个if里面的a的值就是3,不会执行第二个if里面的语句。

用终端运行时会有警告,但不会报错。可以运行。

我的运行结果是输出表达式1,没有输出表达式2.

  1. int main()
  2. {
  3.    
  4.     int a;
  5.     printf("输入一个数");
  6.     scanf("%d",&a);
  7.     if(a = 3) {
  8.         printf("111\n");
  9.     }
  10.     if(a !=3) {
  11.         printf("222");
  12.     }
  13.     return 0;
  14. }
复制代码

回复 使用道具 举报
布鲁兹老爷 发表于 2015-10-11 00:39
你这个是作用域问题啊,很简单,你的变量a是最前面定义的。后面没在任何代码块中重新定义一个a,所以你这个 ...

非常感谢你的解答。
有这个疑问主要是因为,有的语句他的变量赋值以后只作用在它的语句块内,所以确定下。
通过程序执行,和大家的解答,疑惑解开
十分感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马