角色C功能,对其行为有误解

时间:2018-10-16 19:55:44

标签: c function stdio

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

  • 读取一个字母字符序列(不存储该序列),该序列仅在用户输入“ \ n”时结束。

  • 如果大写字母的数目超过用户输入的最大整数m的小写字母,则返回1,否则返回0。

我尝试使用以下代码:

#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中,我不清楚返回函数时的值是否与我一样大。

1 个答案:

答案 0 :(得分:1)

这不会做您可能期望的事情

if(A<=c<=Z)

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

您几乎可以肯定要这么做:

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

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

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