小写转大写 能帮我看看错在哪里吗

问题描述
从键盘输入一个字符串,将其中的小写字母全部转换成大写字母。输入的字符串以“!”结束。
输入
输入只有一行,该行的字符数目不超过100。
输出
把小写字母转换为大写后输出。
输入样列
hello world!
输出样例
HELLO WORLD!

#include<stdio.h>
int main()
{
    char str[110];
    int i,len=0;
    while((str[len]=getchar())!='!')
    {  
         len++; 
    }
    for(i=0;i<len;i++)
        if(str[i]>='a'&&str[i]<='z')
            str[i]-=32;
    puts(str);
    return 0;
}

得用gets()获取字符串,用getchar的话,字符串长度会不对

img

#include<stdio.h>
int main()
{
    char str[110];
    int i,len=0;
    gets(str);
    while(str[len]!='!')
    {  
         len++; 
    }
    //printf("len:%d\n",len) ;
    for(i=0;i<len;i++)
        if(str[i]>='a'&&str[i]<='z')
            str[i]-=32;
    puts(str);
    return 0;
}


试试这个

#include <stdio.h>
int main()
{
    char str[110];
    int i, len = 0;
    while ((str[len] = getchar()) != '!')
    {
        len++;
    }
    str[len + 1] = '\0';
    for (i = 0; i < len; i++)
        if (str[i] >= 'a' && str[i] <= 'z')
            str[i] -= 32;
    puts(str);
    return 0;
}