Онлайн компилятор C

#include <stdio.h> char upper(char c) { int position; if (c >= 'a' && c <= 'z') { position = c - 'a'; c = 'A' + position; } if (c >= 'A' && c <= 'Z') { position = c - 'A'; c = 'a' + position; } return c; } int main() { char a; while ((a = getchar()) != '.') { printf("%c", upper(a)); } return 0; }
这段代码的功能是逐个读取字符,直到遇到句点为止,并对每个字符进行大小写转换。但转换逻辑存在错误:它先尝试将小写转大写,然后紧接着又将大写转小写,导致所有字母最终都被转成了小写。

- 函数 `upper` 中,第一个 `if` 将小写字母转为大写,但第二个 `if` 会立即将刚得到的大写字母又转回小写。你需要思考如何让这两个转换互斥,即只执行其中一个。
- 注意 `upper` 函数名暗示了“转大写”,但当前代码实际上同时做了大小写转换。请明确函数应该只做一种转换,还是根据输入字符决定。