求助,搞不明白一小段c的程序

来源:百度知道 编辑:UC知道 时间:2024/05/07 14:07:32
/*********************************
作者:soyler
日期:2006/11/21
功能:通过调用函数取得小写字母的个数
*********************************/
#include<stdio.h>
int LowerCase(char*);
void main()
{
char ch[100];
int i;
printf("请输入一段字符,字符个数不能超过100个:\n");
gets(ch);
i=LowerCase(ch);
printf("小写字母的个数为:%d\n",i);
}

int LowerCase(char *ch)
{
int i,counter=0;
for(i=0;i<100;i++)
{
if(ch[i]>='a'&&ch[i]<='z')
{
counter++;
}
}

return counter;
}
==========================================
根据作业要求,把用户的输入存入数组中,通过函数调用取得小写字母的个数,编译通过,可是结果不对,得出的数字比正确的数字多1。
比如,输入:Hello World
应该在屏幕上输出8 结果输出9
试过好多,都是正好多1。
不明白。
linzhenwei,谢谢你,因为返回值比正确值多一,所以我也想到在return counter 前加一行counter--就行了,关键是不明白原因是啥?我也知道字符串以“/0”结束,可是不管字符串的最终字符是啥只要不符合(ch[i]>='a&#

解决,因为初始化的问题,ch[100]在循环for(i=0;i<100;i++) 里面,的后面的大部分循环的结果不可以预知。

#include<stdio.h>

int LowerCase(char*);

void main()
{
char ch[100];
int i;
printf("请输入一段字符,字符个数不能超过100个:\n");
gets(ch);
i=LowerCase(ch);
printf("小写字母的个数为:%d\n",i);
}

int LowerCase(char *ch)
{
int i,counter=0;
for(i=0;i<100;i++)
{
if(ch[i]>='a'&&ch[i]<='z')
{
counter++;
}
if(ch[i]=='\0')///////////加入这个可以解决
{
break;
}
}

return counter;
}

#include<stdio.h>
int LowerCase(char*);
void main()
{
char ch[100];
int i;
printf("请输入一段字符,字符个数不能超过100个:\n");
gets(ch);
i=LowerCase(ch);
printf("小写字母的个数为:%d\n",i);
}

int LowerCase(char *ch)