coder20020723 发表于 2023-12-13 20:19:17

请问这段代码有什么问题

这段代码有什么问题?@FishC
编一个函数void fun(char tt[]),它的功能是:将字符串tt中的大写字母都改为对应的小写字母,其它字符不变。
#include <stdio.h>
void fun(char tt[])
{
        int i;
        char a;
        while(1){
                for(int i=0;i<50;i++){
                if(a>= 'A'&& a<='Z'){
                        a+=32;
                       
                }
                }
       break ;
        }
}
int main()
{   char tt;
        printf("请输入字符串:");
        scanf("%s",tt);
    fun(tt);
        printf("转换后:%s",tt);
}

FishC 发表于 2023-12-13 20:19:34

这段代码的问题在于逻辑错误和语法错误。

首先,循环中的条件应该是`i < strlen(tt)`而不是`i= 'A' && a <= 'Z'`,因为我们要遍历整个字符串tt。

其次,循环中的变量i在外部已经声明了,所以在for循环中再次声明会导致重复定义的错误。可以直接使用外部的i。

最后,函数内部创建了一个新的字符数组a,并没有将结果返回给原始字符串tt。可以直接在原始字符串上进行修改。

以下是修正后的代码:

#include <stdio.h>
#include <string.h>

void fun(char tt[])
{
    for (int i = 0; i < strlen(tt); i++) {
      if (tt >= 'A' && tt <= 'Z') {
            tt += 32;// 将大写字母改为小写字母
      }
    }
}

int main()
{
    char str;
    printf("请输入字符串:");
    gets(str);
    fun(str);
    printf("转换后的字符串为:%s\n", str);
    return 0;
}

在这里我们使用到了C语言的字符串操作函数strlen()来获取字符串的长度,并且输入字符串使用了gets()函数,避免了空格等特殊字符的问题。最后,通过主函数打印出了转换后的字符串。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 请问这段代码有什么问题