#include <stdio.h> void main() { int d,c,t; char str; void fun(char s[],int *p1,int *p2,int *p3); printf("input a string:"); gets(str); fun(str[80],&d,&c,&t); printf("str=%s digit=%d char=%d other=%d\n",str,d,c,t); } void fun(char ch[ ], int *pd, *pc, *pt) { int k; pd=pc=pt=0; for (k=0;ch[k]!='\0';k++) { if ((ch[k]>='A'&&ch[k]<='Z')&&(ch[k]>='a'&&ch[k]<='z')) (*pc)++; else if (ch[k]>='0'&&ch[k]<='9') (*pd)++; else (*pt)++; } }
时间: 2024-03-22 17:39:52 浏览: 164
这段代码中存在一些问题,需要进行修改和完善才能正常运行。下面是代码的修改和完善建议:
1. `gets()` 函数已经被废弃,应使用 `fgets()` 函数代替。同时,我们需要定义一个字符数组 `str`,而不是一个字符变量。
2. 函数 `fun()` 的参数应该是 `char[]` 类型,而不是 `char` 类型。同时,指针变量 `pd`、`pc`、`pt` 的初始化应该使用 `*pd=*pc=*pt=0`。
3. `main()` 函数中的调用应该是 `fun(str, &d, &c, &t)`,而不是 `fun(str[80], &d, &c, &t)`。
根据上述建议,修改后的代码如下:
```c
#include <stdio.h>
void fun(char s[], int *p1, int *p2, int *p3);
int main() {
int d = 0, c = 0, t = 0; // 初始化数字、字母和其他字符的个数
char str[81]; // 定义一个字符数组存储输入的字符串
printf("input a string:");
fgets(str, 81, stdin); // 使用 fgets() 函数读取一行字符串
fun(str, &d, &c, &t); // 调用函数统计字符串中数字、字母和其他字符的个数
printf("str=%s digit=%d char=%d other=%d\n", str, d, c, t);
return 0;
}
void fun(char ch[], int *pd, int *pc, int *pt) {
int k;
*pd = *pc = *pt = 0; // 初始化数字、字母和其他字符的个数
for (k = 0; ch[k] != '\0'; k++) {
if ((ch[k] >= 'A' && ch[k] <= 'Z') || (ch[k] >= 'a' && ch[k] <= 'z')) {
(*pc)++; // 统计字母个数
} else if (ch[k] >= '0' && ch[k] <= '9') {
(*pd)++; // 统计数字个数
} else {
(*pt)++; // 统计其他字符个数
}
}
}
```
修改后的代码中,`main()` 函数中使用 `fgets()` 函数读取一行字符串,并调用函数 `fun()` 统计其中数字、字母和其他字符的个数。函数 `fun()` 参数类型改为 `char[]`,并且初始化指针变量时使用 `*pd=*pc=*pt=0`。
阅读全文