Online Compiler 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 = 'a' + position; } putchar(c); } return 0; }
这段代码的功能是逐个读取字符,直到遇到句点为止。对于每个字母字符,它会将大写字母转换为小写,小写字母转换为大写,然后输出转换后的字符。非字母字符会原样输出。

- 代码中使用了 `getchar()` 的返回值赋值给 `char` 类型的变量 `c`,但 `getchar()` 返回的是 `int` 类型,用来区分字符和文件结束符。虽然这里用 `'.'` 作为结束条件,但将返回值直接赋给 `char` 可能会在某些情况下丢失信息,比如当输入包含 EOF 时。考虑将 `c` 的类型改为 `int`,并在循环条件中检查 EOF。

- 注意两个 `if` 语句的顺序:如果输入是小写字母,第一个 `if` 会将其转为大写,然后第二个 `if` 又会将其转回小写。这会导致所有字母最终都变成小写,而不是大小写互换。思考如何调整逻辑,使得每个字符只被转换一次。