鱼C论坛

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

C语言一个 逻辑或 的问题,很迷惑!请帮忙!

[复制链接]
发表于 2012-11-24 16:58:21 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 licker 于 2012-11-24 17:00 编辑

//下面的程序,判断输入的字符是否为(Y、y)其中的一个,然后执行相应的操作;
//代码如下:

#include <stdio.h>
struct stu
{
char name;
};
int main()
{
struct stu person;
printf("请输入测试字符(Y/y):");
fflush(stdin);
scanf("%c", &person.name);

while((person.name != 'y') || (person.name != 'Y'))

//问题出现在上面while的那一行,这行代码的意思,如果我没理解错误的话,
//应该是:当person.name 不等于 'Y' 或者 person.name 不等于 'y' 的时候,
//然后执行循环。 运算符"||"难道不是 “或者” 的意思吗?理论上程序应该
//把输入的字符,先对比 'y' 再和 'Y'对比的呀... 奇怪的是,无论我怎么输
//入,程序永远循环...判断的表达式不起作用... 但当我将 || 改为 &&,程序就通过了,真是奇怪...

{
  printf("请重新输入测试字符:");
  fflush(stdin);
  scanf("%c", &person.name);
}

printf("输入%c正确!\n",person.name);
}

//求助中!!!!谢谢各位!!

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-24 17:22:30 | 显示全部楼层
||的含义是两者相比,只要有一个是真,则整个表达式为真,两者全部为假,整个表达式才为假。并不是汉语中或的意思~
想不循环,就是(person.name != 'y') || (person.name != 'Y')这整个都为假,那么你想想什么时候才能让person.name这个东西即等于'y'同时又等于'Y'呢:lol
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-11-24 19:34:30 | 显示全部楼层

哦!!!!!!!!原来这个样子,回来又详细看了一下书和实验了一下子,有点明白了!!谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-24 19:52:30 | 显示全部楼层
{:7_176:}。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-24 20:17:22 | 显示全部楼层
C语言中‘||’这个 操作符并不是像你理解中文或者的意思。 逻辑运算符还有很多知识点呢, 你好好看下书!  你还是吧概念没有理解清楚!  你任意输入一个字符,它是不可能既不等于‘y’又不等于'Y'的!
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-11-24 20:51:08 | 显示全部楼层
Su_In_Lee 发表于 2012-11-24 20:17
C语言中‘||’这个 操作符并不是像你理解中文或者的意思。 逻辑运算符还有很多知识点呢, 你好好看下书!   ...

嗯,班猪回复,印象很深刻了...我想了一个晚上和一个大白天...

while((person.name != 'y') || (person.name != 'Y'))

像上面的,如果我输入"Y" 或者 "y" 那么,两个当中只有一个真,另外一个假,整条表达式也是“真”while(1)...
再次,我输入的是其它字符,比如"A" 那么符合了:(person.name != 'y') 也符合了 (person.name != 'Y)' 表达式也是真的,A真的不等Y,也不等于y.....So...while(1)...
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-16 12:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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