初学者做作业遇到一个问题

接收输入的一个字符串(无空格、制表符等),

将字符串中的小写字母转换为大写字母,输出转换后的字符串,最后必须输出回车。
最长输入20个有效字符(不包括回车)。
例如输入:apple 输出:APPLE
如果字符串中包含了其他字符,均不进行转换,只转换小写字母为大写字母。
如输入:test2test* 输出:TEST2TEST*

#include 

int main() {
    int i;
    char str[21];
    scanf("%s", str);
    while (str[i] != '\0') {
        if (str[i] > 'a' && str[i] < 'z') {
            str[i] = str[i] - 32;
        }
        i++;
    }
    str[i] = '\n';
    puts(str);
    return 0;
}

提交后只有50分不清楚问题在哪儿

你那个判断,应该是大于等于a和小于等于z!我还是个小学生,希望对你有帮助,如果对了,我还想要点奖励

第一个问题是i你没有初始化为0
第二个问题是 if (str[i] >= 'a' && str[i] <= 'z') { ,你忘了要等于了
第三个问题是你不能用str[i] = '\n',会把字符串结束符覆盖掉

1.头文件没写全,不知道是题主复制粘贴代码的原因还是什么,建议补全;
2.while循环里面的if条件,需要考虑'a'和'z'的情况,题主目前写的条件是(a,z),也就相当于[b,y],这样就刨去两端情况了。