C语言,将小写字母转变为大写字母,我的程序有问题吗?


/*接收输入的一个字符串(无空格、制表符等),
将字符串中的小写字母转换为大写字母,输出转换后的字符串,最后必须输出回车。
最长输入20个有效字符(不包括回车)。
例如输入:apple 输出:APPLE
如果字符串中包含了其他字符,均不进行转换,只转换小写字母为大写字母。
如输入:test2test* 输出:TEST2TEST*  */
#include<stdio.h>
#include<string.h>
int main(void)
{
    int i, n;
    char str1[20];
    char str2[20];
    scanf_s("%s", str1);
    i = strlen(str1);
    for(n = i; i >= 0; n--)
    {if (str1[i]>='a' && str1[i] <= 'z')
        str2[n] = str1[i] - 'a' + 'A';
    else
        str2[n] = str1[i];
    i--;
    }
    printf("%s", str2);
        return 0;
    
}

而且用vs2019显示没有问题,但输入后一直没有输出结果。

for(n = i; i >= 0; n--)i >= 0应该改成n >= 0
for(n = i; n >= 0; n--)

你题目的解答代码如下:

#include<stdio.h>
#include<string.h>
int main(void)
{
    int i, n;
    char str1[20];
    char str2[20];
    scanf_s("%s", str1, 20);
    i = strlen(str1);
    for(n = i; n >= 0; n--)
    {if (str1[n]>='a' && str1[n] <= 'z')
        str2[n] = str1[n] - 'a' + 'A';
    else
        str2[n] = str1[n];
    }
    printf("%s", str2);
        return 0;
}

如有帮助,望采纳!谢谢!

scanf_s("%s", str1,20);
VS有点坑