欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

疑难问题 2020-11-24

程序员文章站 2024-03-19 08:59:40
...

疑难问题

时间:2020/11/24

运行软件:VS2019

#include <stdio.h>
void z(char str[])
{
	static int j, k, l, m;
	for (int i = 0; i < 80; i++)
	{
		if (str[i] >= '0' && str[i] <= '9')	
			j++;
		else if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))	
			k++;
		else if (str[i] == 32)	
			l++;
		else  m++;
	}
}
int main()
{
	int j=0, k=0, l=0, m=0;
	printf("请输入字符串:\n");
	char str[80];
	scanf_s("%s", &str, sizeof(str));
	z(str);
	printf("%d个数字\n%d个字母\n%d个空格\n%d个特殊字符\n", j, k, l, m);
	return 0;
}

运行结果如图:
疑难问题 2020-11-24

问题:函数体内的数字被释放了

当把函数体要用到的数字定义为全局变量

#include <stdio.h>
int j, k, l, m;
void z(char str[])
{	
	for (int i = 0; i<=80; i++)
	{
		if (str[i] >= '0' && str[i] <= '9')	
			j++;
		else if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))	
			k++;
		else if (str[i] == 32)	
			l++;
		else  m++;
	}
}
int main()
{
	j=0, k=0, l=0, m=0;
	printf("请输入字符串:\n");
	char str[80];
	scanf_s("%s", &str, sizeof(str));
	z(str);
	printf("%d个数字\n%d个字母\n%d个空格\n%d个特殊字符\n", j, k, l, m);
	return 0;
}

运行结果如图:

疑难问题 2020-11-24

问题:函数的运行没有一个终点,把剩下的没输入的全当成是特殊字符

解决方法:将函数体for循环的条件改为str[i]!=’\0’,当遇到字符串结束标志则停止循环

#include <stdio.h>
int j, k, l, m;
void z(char str[])
{	
	for (int i = 0; str[i]!='\0'; i++)
	{
		if (str[i] >= '0' && str[i] <= '9')	
			j++;
		else if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))	
			k++;
		else if (str[i] == 32)	
			l++;
		else  m++;
	}
}
int main()
{
	j=0, k=0, l=0, m=0;
	printf("请输入字符串:\n");
	char str[80];
	scanf_s("%s", &str, sizeof(str));
	z(str);
	printf("%d个数字\n%d个字母\n%d个空格\n%d个特殊字符\n", j, k, l, m);
	return 0;
}

运行结果如图:
疑难问题 2020-11-24