搬家电话大众:C语言中 关于IF判断的问题 有点弱智 见笑哈

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/24 08:33:20
main()
{
char a;
int b,i,j;
printf("b?");
scanf("%d",&b);
printf("a?");
scanf("%d",&a);
if(b!=219)
{
if(b==64)
{
if(a==32||a==42)
{
printf("a=32||a=42");
}
else
{
}
}
else
{
printf("b=64");
}
}
else
{
printf("b=219");
}
}

这个是源程序

意思是

当b不等于219时
分为b等于64和b不等于64两种情况

然后当b等于219时 直接打印出“b=219”

但是实际运行结果是这样的

输入
b?:219
a?:65

结果
b=64

不符合原来的意思

请C的高手指点一下....谢谢

不信的朋友可以亲自试一下
诶 感谢大家提出的意见

我想说的是哈

首先那个格式问题是因为在发起问题的时候 本来想要换行符来规范格式的 但是提问里面的一个换行符的空格太多 影响格式 我就换成空格了 结果显示的时候 baidu把每行的第一个空格都省略了 就变成那个样子 是我没有预料到的 不好意思哈

下面是我对问题的分析

当 B=219时 if(b!=219)所包含的条件应该就不会执行哈 为什么还会判断 b是否为64呢 理论上应该是直接执行与if(b!=219)想匹配的else从句(即 printf("b=219");)小弟就是这点不懂 麻烦指教一下

感谢deadwalk 以及 L_o_o_n_i_e对问题的修改

感谢deadwalk的分析

特别要感谢的是460490252的见解

小弟虚心接受

静侯高手的到来

那我也就在补充一下,呵呵
首先向搂主抗议一下,你谢了一圈人,怎么就没谢到我?呵呵~~好歹我是第一个回答的么
然后说正事:)
你的程序,我在BCB6+Update4下编译通过,没有问题。输入b=219,程序就会输出b=219,很正常。
对于你的情况,我建议你首先换个编译器试试。要害是出现你描述的问题话,可以使用调试功能,单步跟踪程序的流程,中间观察各变量的变化,可能是你程序的其他部分引起了逻辑错误。
int main(void)
{
char a;
int b;
printf("b?");
scanf("%d",&b);
printf("a?");
scanf("%d",&a);
if(b!=219)
{
if(b==64)
{
if(a==32||a==42) printf("a=32||a=42");
}
else
{
printf("b=64");
}
}
else
{
printf("b=219");
}
getch();
return 0;
}

//-----------------------------------------------
程序逻辑错误,嗯
重要的在这一块:
if(b==64)
{
if(a==32||a==42)
{
printf("a=32||a=42");
}
//...
}
else
{
printf("b=64");
}
明白没有?按你的逻辑,如果b==64,去判断a;反之如果b!=64,则输出b=64。

应修将那行
if(b==64)
修改成
if(b!=64)
就好了,BCB6编译通过

另友情建议,养成良好的代码格式缩进习惯
可以搞清if/else的配对情况,避免逻辑错误:)

我用VC++编译器在windows 2000上用你的程序算得的结果没问题,结果 b=219.

if(a==32||a==42)
{
printf("a=32||a=42");
}
else
{
}

可以简单写成:
if(a==32||a==42) printf("a=32||a=42");
因为条件不满足,就跳过去了,所以else{}可省.

main
{
char a;
int b,i,j;
printf("b?");
scanf("%d",&b);
printf("a?");
scanf("%d",&a);
if(b==219)
{ print("b=219");}
else if(b==64)
{print("b=64);}
}

答案让别人说完了,但是我还有补充的,不要看那些地摊教程,你的编程书写很不规范,主函数的生命应该这样
int main (void)
不要什么都省略了。还有就算是C语言,也最好对程序进行模块化,规范点,不然你是不可能在编程上有所成就的。