编写一程序实现:从键盘输入一个字符串,将其中的大写字母变成小写字母,小写字母变成大写字母,非字母的字符保持不变,输出变换后字符串。

要求:(1) 用字符数组表示存储字符串(字符串最大为100);
(2) 使用scanf函数逐个输入字符保存在字符数组中;
(3) 使用printf函数逐个输出字符数组中的字符

#include 
#include 
int main()
{
    char a[100];
    int i=0;
    for(i=0;a[i]!='\0';i++)
    scanf("%c",&a[i]);
    for(i=0;a[i]!='\0';i++)
    {
    if(a[i]>='A'&&a[i]<='Z')
        a[i]=a[i]+32;
    else if(a[i]>='a'&&a[i]<='z')
        a[i]=a[i]-32;
    else continue;    
    }
    for(i=0;a[i]!='\0';i++)    
    printf("%c",a[i]);
    return 0;
}


结果为什么只输出3个字符,求解

输入的时候改一下,for里面不需要条件,判断接收的输入是否为回车换行,然后跳出


#include <stdio.h>
#include <string.h>
int main()
{
    char a[100];
    int i=0;
    for(i=0; ; i++)
    {
        scanf("%c",&a[i]);
        if(a[i] == '\n')
        {
            a[i] = '\0';
            break;
        }
    }
    for(i=0;a[i]!='\0';i++)
    {
    if(a[i]>='A'&&a[i]<='Z')
        a[i]=a[i]+32;
    else if(a[i]>='a'&&a[i]<='z')
        a[i]=a[i]-32;
    else continue;    
    }
    for(i=0;a[i]!='\0';i++)    
    printf("%c",a[i]);
    return 0;
}

使用gets(a)

#include <stdio.h>
#include <string.h>
int main()
{
    char a[100];
    int i=0;
    gets(a);
    for(i=0;a[i]!='\0';i++)
    {
    if(a[i]>='A'&&a[i]<='Z')
        a[i]=a[i]+32;
    else if(a[i]>='a'&&a[i]<='z')
        a[i]=a[i]-32;
    else continue;    
    }
    for(i=0;a[i]!='\0';i++)    
    printf("%c",a[i]);
    return 0;
}


修改

for (i = 0; a[i] != '\0'; i++)
        scanf("%c", &a[i]);

scanf("%s", a);