鱼C论坛

 找回密码
 立即注册
查看: 2113|回复: 5

为什么不出答案?哪儿错了!

[复制链接]
发表于 2012-6-21 09:01:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream.h>
void main()
{
int x,y;
cout <<"请输入一个数"<<endl;
cin >>x;
switch (x)
{
  case 1: if (x<0)  cout<<"y=-1";
  break ;
  case 2:if (x=0) cout<<"y=0";
  break ;
  case 3: if(x>0) cout<<"y=1";
  break ;
}
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-6-21 09:11:15 | 显示全部楼层
这个你本来写的就是错误的,这种判断是不能用switch来实现。比如你输入1 现在x=1到第一个分支你又判断如果x<0才输入出,请问1<0么,肯定不成立,所以直接跳过cout<<"y=-1";。依次类推。楼主自己琢磨把
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-6-21 09:18:35 | 显示全部楼层
我没拉去调试,只针对你的代码,排除语法错误。   首先,你在case标号后面写的if语句没有任何意义,当你输入2的时候,会执行,case 2,  你后面是if(x = 0),  这个条件是个赋值语句,永远为真,所以,会打印出结果。当你输入3的时候,3>0.满足条件,也能打印出结果,但是输入其他任何非2和3的值,就不会出结果。所以LZ对程序逻辑的设计没有符合你本身所想达到的意义。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-6-21 09:21:50 | 显示全部楼层
首先,不晓得LZ对switch语句 的实现是否了解,我也就说下,switch语句的实现,是先计算switch后面的小括号内的表达式的值,然后去跟每个case分支的标号对比,若跟标号相等,就执行标号后的语句。当然switch内部反汇编实现,比这个深奥的多。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-6-21 13:32:24 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-6-21 13:34:29 | 显示全部楼层
新新人类 发表于 2012-6-21 09:11
这个你本来写的就是错误的,这种判断是不能用switch来实现。比如你输入1 现在x=1到第一个分支你又判断如果x

谢谢,懂了!
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 13:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表