在线编译器 C

#include <stdio.h> int main() { char c; int position; while ((c = getchar()) != '.') { if (c >= 'a' && c <= 'z') { position = c - 'a'; c = 'A' + position; } if (c >= 'A' && c <= 'Z') { position = c - 'A'; c = 'c' + position; } putchar(c); } return 0; }
这段代码试图将输入的小写字母转换为大写,再将大写字母转换为小写,但存在逻辑错误。

- 第一个 `if` 将小写字母转为大写后,紧接着的第二个 `if` 会立即将刚得到的大写字母又转回小写,导致最终输出与原字母相同,没有实现大小写互换。
- 第二个 `if` 中的 `'c' + position` 写法有误,`'c'` 是小写字母 c 的 ASCII 值,不是大写字母 A 的起始值,应该使用 `'a'` 或 `'A'` 作为基准。

- 提示:思考一下,当第一个 `if` 执行后,`c` 的值变成了大写字母,此时第二个 `if` 的条件是否也会满足?如何避免这种连续转换?
- 提示:检查第二个 `if` 中基准字符的选择,确保转换后得到的是正确的大小写字母。