疑难问题 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;
}
运行结果如图:
问题:函数体内的数字被释放了
当把函数体要用到的数字定义为全局变量
#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;
}
运行结果如图:
问题:函数的运行没有一个终点,把剩下的没输入的全当成是特殊字符
解决方法:将函数体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;
}
运行结果如图: