鱼C论坛

 找回密码
 立即注册
查看: 1179|回复: 3

[已解决]大小写英文转换代码,帮我看看哪不对了

[复制链接]
发表于 2023-9-17 02:41:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么得出的结果是三个方框
#include<stdio.h>
int main()
{
        int ch;
        printf("输入一行英文句子:");
        while(ch=getchar()!='\n')
        {
                if(ch<='Z'&&ch>='A')
                ch=ch+32;
                else if(ch<='z'&&ch>='a')
                ch=ch-32;
                putchar(ch);
         } 
         putchar('\n');
         return 0; 
}
最佳答案
2023-9-17 02:41:23
这段代码的问题在于while循环中的括号没有加上,导致不会正确读取输入的字符。修改后的代码如下:
#include<stdio.h>
int main()
{
    int ch;
    printf("输入一行英文句子:");
    while((ch=getchar())!='\n')
    {
        if(ch<='Z'&&ch>='A')
            ch=ch+32;
        else if(ch<='z'&&ch>='a')
            ch=ch-32;
        putchar(ch);
    } 
    putchar('\n');
    return 0; 
}

另外,建议在程序开头添加注释,解释代码的作用和实现的功能,方便其他人阅读和理解代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-17 02:41:23 | 显示全部楼层    本楼为最佳答案   
这段代码的问题在于while循环中的括号没有加上,导致不会正确读取输入的字符。修改后的代码如下:
#include<stdio.h>
int main()
{
    int ch;
    printf("输入一行英文句子:");
    while((ch=getchar())!='\n')
    {
        if(ch<='Z'&&ch>='A')
            ch=ch+32;
        else if(ch<='z'&&ch>='a')
            ch=ch-32;
        putchar(ch);
    } 
    putchar('\n');
    return 0; 
}

另外,建议在程序开头添加注释,解释代码的作用和实现的功能,方便其他人阅读和理解代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-17 18:33:55 | 显示全部楼层
在你的代码中,出现三个方框的原因是字符类型的问题。

在C语言中,字符类型使用的是 `char` 类型,它是一个整数类型,用于表示字符的ASCII码值。而在你的代码中,你使用了 `int` 类型来存储从输入中获取的字符。

问题在于,`getchar()` 函数返回的是 `int` 类型,用于存储字符的ASCII码值,而不是字符本身。

在 `while` 循环中,你将 `ch=getchar()!='\n'` 当作条件判断,这样会导致 `getchar()` 返回的ASCII码值与字符 '\n' 进行比较。由于 `getchar()` 返回的是 `int` 类型,它的范围可能超过 `char` 类型的表示范围(-128到127或0到255,取决于具体实现)。

当输入回车键时,对于大多数终端和系统来说,`\n` 的ASCII码值是10。此时,`getchar()` 返回的ASCII码值为10,与字符 '\n' 进行比较,结果为真(非零),进入循环体。

然后,在循环体内部,你执行了大小写字母转换的操作,并将结果存储在 `ch` 变量中。由于你将字符的ASCII码值赋值给了 `int` 类型的变量,导致转换后的结果也是一个整数值。

最后,当你使用 `putchar(ch)` 输出结果时,`putchar()` 函数期望的参数类型是 `int` 类型的字符编码值,而不是整数值。因此,当输出转换结果时,`putchar()` 函数无法正确解释整数值,可能导致输出成方框。

要解决这个问题,你应该将 `ch` 的类型声明为 `char`,而不是 `int`,以便正确存储和处理字符。同时,你需要将 `getchar()` 返回的整数值强制转换为字符类型进行大小写转换。修改后的代码如下:

#include <stdio.h>

int main() {
    char ch;
    printf("输入一行英文句子:");
    while ((ch = getchar()) != '\n') {
        if (ch <= 'Z' && ch >= 'A')
            ch = ch + 32;
        else if (ch <= 'z' && ch >= 'a')
            ch = ch - 32;
        putchar(ch);
    }
    putchar('\n');
    return 0;
}

通过以上修改,你应该能够正确地执行大小写字母的转换并输出结果,而不会出现方框。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-17 21:36:00 | 显示全部楼层
如果你在终端中输入非ASCII字符(如Unicode字符)或特殊字符,终端可能无法正确显示它们,并显示为方框或其他替代字符。这是由于终端的字符编码和字体设置引起的。

在你的描述中,当你在终端输入字母"g"时,输出显示为三个方框。这是因为终端无法正确显示该字符,而使用了方框来表示。

要解决这个问题,你可以尝试以下几种方法:

1. 确保你所使用的终端支持并正确设置了字符编码,例如UTF-8。可以查看终端的设置或配置项,并进行相应调整。
2. 确保你所使用的终端的字体支持所需的字符集。尝试更换字体以查看是否能够正确显示字符。
3. 如果你在终端中输入的字符是非ASCII字符,可以尝试使用转义序列来表示该字符,例如Unicode转义序列"\u"或"\U"。这样可以确保终端正确解析和显示该字符。

请注意,具体的解决方法可能因终端软件、操作系统以及你的设置而有所不同。建议参考终端软件的文档或进行相关的网络搜索,以获取关于如何正确显示特殊字符的具体步骤和指导。

希望以上信息对你有所帮助!如果还有其他问题,请随时提问。
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 04:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表