c语言,又遇新问题了,无法统计出来

来源:百度知道 编辑:UC知道 时间:2024/06/05 05:47:56
#include <stdio.h>

int abc_num=0,num_num=0,kong_num=0,other_num=0;

void tongji(char str[]);

main ()
{
/* 为了安全一点,最好给上面定义的几个_num赋初值0 */
static char cstr[100]="";
printf("输入一个字符串:");scanf("%s",cstr);
tongji(cstr);
printf("有%d个字母\n",abc_num);
printf("有%d个数字\n",num_num);
printf("有%d个空格\n",kong_num);
printf("有%d个其它字符",other_num);
getch();
}

void tongji(char str[])
{
int str_len,i;
str_len=strlen(str);
for (i=0;i<str_len;i++)
{
/* 统计前三个项 */
if (str[i]>=(int)'0' && str[i]<=(int)'9') num_num+=1;
else if ((str[i]>=(int)'a' && str[i]<=(int)'z') || (str[i]>=(int)'a' && str[i]<=(int)'z')) abc_num+=1;
else if (str[i]==' ') kong_num+=1;
}
/* 统计非字母非数字非空格的字符 */ <

看了一下,你用scanf获取一行数据,应该是有问题的。
我在scanf后加了一行printf("cstr is:%s",cstr);
可以看出,只获取了空格前的数据。因为scanf默认是以空字符作为结束符的,所以你回车还是空格,在scanf里是一样的。

可以用gets()代替scanf()

代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int abc_num=0,num_num=0,kong_num=0,other_num=0;

void tongji(char str[]);

main ()
{
/* 为了安全一点,最好给上面定义的几个_num赋初值0 */
static char cstr[100]="";
printf("输入一个字符串:");/*scanf("%s",cstr);*/
gets(cstr);
printf("cstr is:%s\n",cstr);
tongji(cstr);
printf("有%d个字母\n",abc_num);
printf("有%d个数字\n",num_num);
printf("有%d个空格\n",kong_num);
printf("有%d个其它字符",other_num);
system("PAUSE");
}

void tongji(char str[])
{
int str_len,i;
str_len=strlen(str);
for (i=0;i<str_len;i++)
{
/* 统