落单的袜子 发表于 2023-9-17 02:41:19

大小写英文转换代码,帮我看看哪不对了

为什么得出的结果是三个方框
#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;
}

isdkz 发表于 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;
}


另外,建议在程序开头添加注释,解释代码的作用和实现的功能,方便其他人阅读和理解代码。

Mike_python小 发表于 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;
}


通过以上修改,你应该能够正确地执行大小写字母的转换并输出结果,而不会出现方框。

琅琊王朝 发表于 2023-9-17 21:36:00

如果你在终端中输入非ASCII字符(如Unicode字符)或特殊字符,终端可能无法正确显示它们,并显示为方框或其他替代字符。这是由于终端的字符编码和字体设置引起的。

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

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

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

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

希望以上信息对你有所帮助!如果还有其他问题,请随时提问。
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!
页: [1]
查看完整版本: 大小写英文转换代码,帮我看看哪不对了