要求编写函数的练习:
读取只有在用户输入'\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
函数和函数是如何工作的,什么时候和谁被赋予了优先权。例如,在function
read
中,我不清楚返回到函数的值何时会像我一样放高。 最佳答案
这不会像你期望的那样
if(A<=c<=Z)
... 因为各种原因。首先,未初始化
A
和Z
的值。其次,逻辑是由数学家而不是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/