int stat(char att[10]); int main() { char att[10]; int i; printf("输出一串字符为"); for(i=0;i<=10;i++) { scanf("%c",&att[i]); } printf("%s\n",att); stat(att); printf("%s\n",att); return 0; } int stat(char att[10]) { int i; for(i=0;att[i]!='\0';i++) { if(att[i]>='a'&&att[i]<='z') { att[i]=att[i]-32; } else(att[i]>='A'&&att[i]<='Z') { att[i]=att[i]+32; } } }改进一下,并让它能正常运行与解释其原理
时间: 2024-04-16 10:27:08 浏览: 21
在你提供的代码中,有几个问题需要改进:
1. 在 `main` 函数中,你使用了 `for(i=0;i<=10;i++)` 来遍历数组 `att`,但是数组的索引应该从 0 开始,所以应该改为 `for(i=0;i<10;i++)`。
2. 在 `stat` 函数中,你使用了 `else(att[i]>='A'&&att[i]<='Z')`,这是不正确的语法。应该使用 `else if` 来判断大写字母。
3. 在 `stat` 函数中,你没有在函数原型中声明返回类型,应该将其改为 `void stat(char att[10])`,因为该函数没有返回值。
4. 在 `stat` 函数中,你没有添加字符串结束符号 `\0`,所以在打印字符串时可能会出现错误。在循环结束后,可以手动添加 `att[i] = '\0';`。
改进后的代码如下所示,并附带了解释:
```c
#include <stdio.h>
void stat(char att[10]);
int main()
{
char att[10];
int i;
printf("输出一串字符为");
for(i=0;i<10;i++)
{
scanf("%c",&att[i]);
}
printf("%s\n",att);
stat(att);
printf("%s\n",att);
return 0;
}
void stat(char att[10])
{
int i;
for(i=0;att[i]!='\0';i++)
{
if(att[i]>='a'&&att[i]<='z')
{
att[i]=att[i]-32;
}
else if(att[i]>='A'&&att[i]<='Z')
{
att[i]=att[i]+32;
}
}
att[i] = '\0';
}
```
这段代码的功能是将输入的字符串中的小写字母转换为大写字母,大写字母转换为小写字母,并将结果打印出来。首先,在 `main` 函数中,你输入一串字符存储在 `att` 数组中,然后将其打印出来。接下来,调用 `stat` 函数来处理字符串中的字符,并将结果打印出来。在 `stat` 函数中,遍历字符串的每个字符,如果是小写字母就转换为大写字母,如果是大写字母就转换为小写字母。最后,将字符串结束符号 `\0` 添加到末尾,确保正确的字符串打印。
希望能解答你的问题!如果还有其他问题,请随时提问。