编程小土豆 发表于 2019-8-4 17:42:34

C语言

#include <conio.h>
void main()
{
        double j;
        while(1)
        {
                j = getchar();
                if(j=='0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')
                {
                        printf("是数字!\n");
                }
                else
                {
                        continue;
                }
        }
        getch();
}
为什么输入任何字符都会打印出“是数字”...... 这个IF有什么问题呀?

迷雾少年 发表于 2019-8-4 17:45:34

if(j=='0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')

if成立的条件是j==‘0' 或者 '1'或者 '2'..........
就是不管j是什么后面|起来的都恒成立
这个if一定成立

大哥养的猪 发表于 2019-8-4 17:52:48

这个if语句应该改成if(j>=48 && j<=57)

micolar 发表于 2019-8-4 19:38:19

if(j=='0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')
你只判断j是否等于'0' 然后那些123456789都是数值 不是表达式 简单点说你以为123456789有跟j判断是否相等 实际上没有
c非0为真 后面判断到字符‘1’ = 49 自然就是真的了
你要写的话
楼上说了
if(j >=48 && j <=57)
当然也可以
if(j=='0'||j=='1'||j=='2'||j=='3'||j=='4'||j=='5'||j=='6'||j=='7'||j=='8'||j=='9')

编程小土豆 发表于 2019-8-5 14:24:20

成功了,谢谢大家!
页: [1]
查看完整版本: C语言