| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 559 人关注过本帖
标题:关于scanf的问题
只看楼主 加入收藏
吴小君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:198
注 册:2012-1-2
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:9 
关于scanf的问题
刚开始学C语言,可能问题有点弱弱,请前辈指导。
我自己编了一个小程序玩的,可是出了点问题,找不出原因:
#include<stdio.h>
void main()
{
  char a;
  int b;
  printf("do you like c?");
  scanf("%c",&a);
  b=a=='y'||'Y'?1:0;
  if(b) printf("work harder!");
  else
  printf("why?");
 }
我运行时就不能出现why?的结果,但如果直接给b赋值为0就可以得到
搜索更多相关主题的帖子: harder C语言 
2012-01-03 12:44
吴小君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:198
注 册:2012-1-2
收藏
得分:0 
我看过一篇帖子,说是b=a=='y'||'Y'?1:0;是恒为逻辑真,感觉是这儿出了问题,但不知道为什么

小弟学习C语言刚入门,请大侠们多多指教,不吝赐解!
2012-01-03 12:49
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:10 
b = (a=='y' || a=='Y')?1:0;
易发生歧义又不确定的地方最好用括号明确优先级。

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-01-03 13:21
小蝦米
Rank: 2
等 级:论坛游民
帖 子:38
专家分:88
注 册:2011-12-18
收藏
得分:0 
b=a=='y'||'Y'?1:0;的值恒为1
将||改成&&就可以了

[ 本帖最后由 小蝦米 于 2012-1-3 13:24 编辑 ]
2012-01-03 13:22
吴小君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:198
注 册:2012-1-2
收藏
得分:0 
回复 3楼 lonmaor
它的优先级好像真有歧义诶,谢谢指导哈

[ 本帖最后由 吴小君 于 2012-1-3 13:44 编辑 ]

小弟学习C语言刚入门,请大侠们多多指教,不吝赐解!
2012-01-03 13:36
吴小君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:198
注 册:2012-1-2
收藏
得分:0 
回复 4楼 小蝦米
为什么它值恒为1啊?用&&的话它值理论上不是恒为0了吗?下面这个程序
#include<stdio.h>
void main()
{
 int year,leap;
 scanf("%d",&year);
 if(year%4==0&&year%100!=0||year%400==0) leap=1;
else leap=0;
 if(leap)
 printf("%d is",year);
 else
 printf("%d is not",year);
 printf(" a leap year\n");
   }
它不是就用||的吗?而且也能正常运行啊
请前辈给小弟细说一下吧,谢谢啦!

小弟学习C语言刚入门,请大侠们多多指教,不吝赐解!
2012-01-03 13:42
小蝦米
Rank: 2
等 级:论坛游民
帖 子:38
专家分:88
注 册:2011-12-18
收藏
得分:0 
你的表达式不是你本来的意思
优先级:==关系运算符>||逻辑运算符>?:条件运算符
你这里,是先做a==‘y’,只有输入小写y才为真,‘Y’的值为真,所以不管你输入什么a==‘y’||‘Y’的值肯定为1
你可以写成这样
程序代码:
#include "stdio.h"
void main()
{
  char a;
  //int b;
  printf("do you like c?");
  scanf("%c",&a);
  //b=a=='y'||'Y'?1:0;
  if(a=='y'||a=='Y')
  printf("work harder!");
  else
  printf("why?");
}


 

[ 本帖最后由 小蝦米 于 2012-1-3 14:08 编辑 ]
2012-01-03 14:05
吴小君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:198
注 册:2012-1-2
收藏
得分:0 
回复 7楼 小蝦米
恩,谢谢哈,我懂了
我刚才试了试,要是把a=b=='y'||'Y'?1:0;改成a=b=='y'&&'Y'?1:0;的话,输入Y就不管用了
不过现在这个应该好用的

小弟学习C语言刚入门,请大侠们多多指教,不吝赐解!
2012-01-03 14:15
小蝦米
Rank: 2
等 级:论坛游民
帖 子:38
专家分:88
注 册:2011-12-18
收藏
得分:0 
我该怎么说呢,你看你的代码,运算符的优先级:==大于||大于?:,所以先做==再做||,你的表达式就等价于b=(a=='y')||'Y'.你刚才说的是对的,改&&输入Y就没用了,但是你不改,这个表达式的值就取决于(a==‘y’)的值和‘Y’的值,因为是或运算,‘Y’的值为真,那么a=='y'||'Y'的值就恒为真
2012-01-03 14:28
吴小君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:198
注 册:2012-1-2
收藏
得分:0 
回复 9楼 小蝦米
恩,是的呢,后来我就把改成了a=b=='y'||b=='Y'?1:0;就好用了

小弟学习C语言刚入门,请大侠们多多指教,不吝赐解!
2012-01-03 14:38
快速回复:关于scanf的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020359 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved