黑马程序员技术交流社区

标题: 新人求解答 [打印本页]

作者: lijiujian    时间: 2016-3-18 09:29
标题: 新人求解答
int  num=0;
printf("请输入一个数字:\n");
scanf(%d,&sum);
if(num = 5){
  printf("恭喜你!\n");
}
if(num != 5){
  printf("很可惜!\n");
}
  return = 0;
上述程序中“if(num = 5)”是故意这么写的 ,我想问的是当输入一个数字以后  为什么输出的只有“恭喜你”而下面的程序没有执行? 谢谢各位朋友了
作者: chenglei2016    时间: 2016-3-18 17:01
首先还是要说千万不要写这样写if(num = 5),一定要用双等于号。现在你的 if(num = 5)中,"="是给num赋值为5了,这个条件是一定成立的了,所以就一定会执行这个分支里的语句。而下面的if(num!=5)条件不满足所以就不会执行下面这个if中的语句啊。
作者: 外号狐狸    时间: 2016-3-18 22:17
“=”与“==”是有很大区别,条件判断的时候,一定要使用关系运算符。
作者: yuluoyu    时间: 2016-3-18 22:43
nishurudeshiwuma
作者: 泥娃娃    时间: 2016-3-19 16:18
1.在C语言里“=”是赋值,“==”才是正常理解的等于。
2.if函数的判断语句只有真和假,只有为真,永远成立。
作者: 喧闹的世界    时间: 2016-3-19 17:37
你的第一个if内判断num = 5等价于true也就是永远为真,且将5赋值给num,后面那个if就是false了,所以没有输出。意思也就是说,你的程序代码:
int  num=0;
printf("请输入一个数字:\n");
scanf(%d,&sum);
num = 5;
  printf("恭喜你!\n");
}
if(num != 5){
  printf("很可惜!\n");
}
  return = 0;
作者: lijiujian    时间: 2016-3-21 09:42
chenglei2016 发表于 2016-3-18 17:01
首先还是要说千万不要写这样写if(num = 5),一定要用双等于号。现在你的 if(num = 5)中,"="是给num赋值为5 ...

首先谢谢你,赋值和等于这个注意点我了解,而我故意写成等于,第一个if语句是永远执行的,可是照理说下面的if语句也应该执行啊,可是为什么没打印出来呢?我纠结的地方在这,我是菜鸟 可能没绕过来弯  希望详解
作者: lijiujian    时间: 2016-3-21 09:43
外号狐狸 发表于 2016-3-18 22:17
“=”与“==”是有很大区别,条件判断的时候,一定要使用关系运算符。

谢谢  我纠结的不是赋值和等于   而是为什么没执行下面的程序  没有打印
作者: lijiujian    时间: 2016-3-21 09:45
yuluoyu 发表于 2016-3-18 22:43
nishurudeshiwuma

先谢谢你  麻烦打汉字
作者: lijiujian    时间: 2016-3-21 09:50
喧闹的世界 发表于 2016-3-19 17:37
你的第一个if内判断num = 5等价于true也就是永远为真,且将5赋值给num,后面那个if就是false了,所以没有输 ...

首先谢谢你,然后我是菜鸟,即使第一个if语句是真永远执行,那么第二if语句也应该执行输出 ”很可惜“啊   我纠结在这  麻烦详解
作者: 15527933998    时间: 2016-3-21 10:29
因为5是真,if(num=5)相当于:
作者: 外号狐狸    时间: 2016-3-21 16:08
lijiujian 发表于 2016-3-21 09:43
谢谢  我纠结的不是赋值和等于   而是为什么没执行下面的程序  没有打印

第一次if 是将你scanf输入的数字做了一次赋值,就是说 你scanf了之后,不管输入了多少,第一个if就会将5赋值给mun,同时条件为真。执行第一个if语句,当第二次if判断的时候,mun!=5。这个时候mun的值是5了。条件为假,所以不执行
作者: 叫我超哥    时间: 2016-3-21 16:51
赋值与条件判断不一样
作者: 啊海    时间: 2016-3-21 16:52
一个=号是赋值运算符,而if语句里面是比较条件表达返回的是boolean类型要么是true 要么是false 当为true时执行if语句休
作者: 喧闹的世界    时间: 2016-3-21 20:51
lijiujian 发表于 2016-3-21 09:50
首先谢谢你,然后我是菜鸟,即使第一个if语句是真永远执行,那么第二if语句也应该执行输出 ”很可惜“啊  ...

第二句是执行了的,问题是你第一句num=5。第二句if判断为false,所以没有输出,你可以试试把第二句改成:if(num !=4)你想要的“很可惜”就有了。
作者: lijiujian    时间: 2016-3-22 10:12
喧闹的世界 发表于 2016-3-21 20:51
第二句是执行了的,问题是你第一句num=5。第二句if判断为false,所以没有输出,你可以试试把第二句改成: ...

懂了,我自己有个小弯没转过来,谢谢你啊,可以家好友么
作者: lijiujian    时间: 2016-3-22 10:19
外号狐狸 发表于 2016-3-21 16:08
第一次if 是将你scanf输入的数字做了一次赋值,就是说 你scanf了之后,不管输入了多少,第一个if就会将5 ...

非常感谢,自己有个小弯没转过来,加好友?




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