一个练习要求编写一个函数,该函数:
读取一个字母字符序列(不存储该序列),该序列仅在用户输入“ \ 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
中,我不清楚返回函数时的值是否与我一样大。
答案 0 :(得分:1)
这不会做您可能期望的事情
if(A<=c<=Z)
...出于各种原因。首先,A
和Z
的值未初始化。其次,编写逻辑是由数学家而不是C编译器读取的。
您几乎可以肯定要这么做:
if('A'<=c && c<='Z')
...并删除四个变量char A,Z,a,z;
请注意,使用诸如'A'
和'Z'
之类的字符常量假定使用ASCII字符集的运行时环境。如果您对更便携的解决方案感兴趣,可以查找isupper()
和islower()