2401_85441566 2025-11-25 11:55 采纳率: 100%
浏览 5
已结题

输入输出遇到问题。和预期不符。不确定是不是空格的问题。

要求是:将输入的一行字符中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母后输出,其他字符按原样输出。
代码是:

#include<stdio.h>
int main()
{
    char ch;
    while((ch=getchar())!='\n')
    {
        if(ch>='A'&&ch<='Z') 
        {
            if(ch=='Z')
            {ch='a';}
            else ch=ch-32+1;
        }
        else if(ch>='a'&&ch<='z')
        {
        if(ch=='z')
        {
            ch='A';
        }
        else ch=ch+32+1;
        }
         printf("%c",ch);
    }
    return 0;
}

输入是:Reold Z123?
预期结果是:sFPME a123?
测试出来的结果是:3�(四个�) a123?或者3a(四个a) a123?

  • 写回答

3条回答 默认 最新

  • a5156520 2025-11-25 14:35
    关注

    是大小写转换错了,将第11行和第19行对换即可。

    修改如下:

    参考链接:

    #include<stdio.h>
    int main() {
    
        char ch;
        
        while((ch=getchar())!='\n') {
            
            if(ch>='A'&&ch<='Z') {
                
                if(ch=='Z') {
                    ch='a';
                }else 
                // https://blog.csdn.net/d704791892/article/details/141753599
                // 大小写转换错了,将两个else对换即可 
                    ch=ch+32+1;
                    
            } else if(ch>='a'&&ch<='z') {
                
                if(ch=='z') {
                    ch='A';
                } else 
                    ch=ch-32+1;
            }
            
            printf("%c",ch);
        }
        
        return 0;
        
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 创建了问题 11月25日