c - "Logical or"和 "logical and"c 中的 if 语句输出不同,尽管看起来相同

标签 c

所以我得到了我编写的代码示例。我的目标是打印存储在 ptr char 变量中的句子中的数字。所以代码的第一部分完成了这项工作。

#include <stdio.h>
#include <stdlib.h>
void preg(char *p);

int main(int argc, char *argv[])
{
        char *ptr;
        ptr="John is 5 , jim is 2 and maria is 12";
        preg(ptr);

        return 0;
}


void preg(char *p)
{      
        while(*p!='\0')
        {
                if(*p>='0' && *p<='9')
                {
                        putch(*p);
                }
                *p++;
        }
}

但是如果我将 preg 函数更改为:

   void preg(char *p)
    {      
            while(*p!='\0')
            {
                    if(*p>='0' || *p<='9')// <--- Changed to logical or
                    {
                            putch(*p);
                    }
                    *p++;
            }
    }

程序打印整个句子?这对我来说似乎很奇怪,因为在这种情况下,两个逻辑运算符似乎都适合给定的任务。我希望有人能向我解释其中的区别。我怀疑它与数字比较时字符表示为整数的方式有关。

最佳答案

*p>='0' || *p<='9'等价于 true,因为 '9' >= '0' .

关于c - "Logical or"和 "logical and"c 中的 if 语句输出不同,尽管看起来相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594947/

相关文章:

c中的循环移位

c - 两个进程之间的 mq_notify - C

c - 程序的虚拟地址空间有多大?

c - C 中的函数参数在函数调用后未修改

C Struct char 成员得到一个奇怪的值

c - 可避免使用 "unfull"结构进行填充

c - 如何在没有指针地址的情况下将结构指针分配为零并在下面的代码中查找结构的 sizeof ?

c - 使用 dup() 创建重复文件描述符和创建硬链接(hard link)之间的区别?

c++ - 指针:C++ 要求所有声明都有类型说明符

无法从 OpenGL 中的着色器访问先前渲染的纹理