|
发表于 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;
- }
复制代码
通过以上修改,你应该能够正确地执行大小写字母的转换并输出结果,而不会出现方框。 |
|