#1.#include <stdio.h> #2.void main() #3.{ #4. int d,c,t; #5. char str; #6. void fun(char s[],int *p1,int *p2,int *p3); #7. printf("input a string:"); #8. gets(str); #9. fun(str[80],&d,&c,&t); #10. printf("str=%s digit=%d char=%d other=%d\n",str,d,c,t); #11.} #12.void fun(char ch[ ], int *pd, *pc, *pt) #13.{ #14. int k; #15. pd=pc=pt=0; #16. for (k=0;ch[k]!='\0';k++) #17. { #18. if ((ch[k]>='A'&&ch[k]<='Z')&&(ch[k]>='a'&&ch[k]<='z')) (*pc)++; #19. else if (ch[k]>='0'&&ch[k]<='9') (*pd)++; #20. else (*pt)++; #21. } #22.} 这个C程序是对一个给定的字符串,统计其中数字、大小写字母及其他符号的个数的功能,在主程序中输入字符串并调用函数fun,接收并输出返回的结果。请问哪几行错了?
时间: 2024-03-21 15:43:41 浏览: 114
这个程序有多处错误:
1. 第5行应该将字符声明为字符数组:`char str[80];`
2. 第8行使用了不安全的函数`gets`,应该使用安全的函数`fgets`。
3. 第9行调用`fun`函数时,应该传入字符数组`str`的地址,而不是下标。应该修改为:`fun(str, &d, &c, &t);`
4. 第15行将指针变量`pd`、`pc`、`pt`赋值为0,应该修改为:`*pd = *pc = *pt = 0;`
5. 第12行中,指针变量`pd`、`pc`、`pt`的类型声明错误,应该修改为:`int *pd, *pc, *pt;`
修改后的程序如下所示:
```
#include <stdio.h>
void fun(char s[], int *p1, int *p2, int *p3);
void main()
{
int d, c, t;
char str[80];
printf("input a string:");
fgets(str, 80, stdin);
fun(str, &d, &c, &t);
printf("str=%s digit=%d char=%d other=%d\n", str, d, c, t);
}
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)++;
}
}
```
阅读全文