要求编写函数的练习:
读取只有在用户输入'\n'时才结束的字母字符序列(不记忆序列)。
如果大写字母的数目超过用户输入的整数m或0中的较小字母,则返回1。
我尝试使用以下代码:

#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,就好像它在函数中输入了0,而没有对字符进行第二次扫描一样。
除了对程序和c函数的形式上的误解和错误,我很高兴你能纠正,
我试着去理解,因为正如他们所说,我试着去自学,一般来说,scanf函数和函数是如何工作的,什么时候和谁被赋予了优先权。
例如,在functionread中,我不清楚返回到函数的值何时会像我一样放高。

最佳答案

这不会像你期望的那样

if(A<=c<=Z)

... 因为各种原因。首先,未初始化AZ的值。其次,逻辑是由数学家而不是C编译器来读取的。
你几乎肯定想要这个:
if('A'<=c && c<='Z')

... 删除四个变量char A,Z,a,z;
注意,使用字符常量(如'A''Z'假定运行时环境使用ASCII字符集。如果您对更便携的解决方案感兴趣,可以查找isupper()islower()

关于c - 角色C功能,对其行为有误解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52843138/

10-12 05:39