字符 C 函数,对其行为的误解

Character C-function, misconception on its behaviour

一个练习要求编写一个函数:

我尝试使用以下代码:

#include<stdio.h>

int read(int p,char c)
{
    int M=0,m=0,d;
    char A,Z,a,z;

    while(c != '\n')
    {
        if(A<=c<=Z)
        {
            M++;
        }
        else if(a<=c<=z)
        {
            m++;
        }
        scanf("%c",&c);
    }

    if(M-m>0)
        d=(m-M);
    else 
        d=0;

    if(d==0)
        return 0;
    else if (d<=p)
        return 1;
}

int main()
{
    int a,h;
    char k;

    scanf("%d", &h);
    scanf("%c", &k);
    a=read(h,k);
    printf("%d\n",a);
    return 0;
}

此时,尝试使用 gcc 命令执行程序,我注意到程序只取整数,比方说 2,然后返回 0,就好像它在没有进行第二次扫描的情况下进入函数一样关于角色。

除了关于程序和 c 函数的正式误解和错误,我很高兴你纠正,

我试图理解,因为正如他们所说,我正在努力自学,scanf 函数和函数的一般工作原理,何时以及谁优先考虑。

例如在函数 read 中,我不清楚我返回给函数的值是什么时候像我一样将更高的 if 值取下来。

这与您可能期望的不同

if(A<=c<=Z)

...出于各种原因。首先,AZ 的值是未初始化的。其次,编写逻辑是为了让数学家阅读,而不是 C 编译器。

您几乎肯定想要这个:

if('A'<=c && c<='Z')

... 并删除四个变量 char A,Z,a,z;

请注意,'A''Z' 等字符常量的使用假定运行时环境使用 ASCII 字符集。如果您对更便携的解决方案感兴趣,可以查找 isupper()islower()