在线编译器 C

#include <stdio.h> int main() { char c; do { scanf("%c", &c); if (c >= 'a' && c <= 'z') c = c - 32; if (c >= 'A' && c <= 'Z') c = c + 32; printf("%c", c); } while (c != '.'); return 0; }
这段代码的功能是逐个读取用户输入的字符,并尝试对字母进行大小写转换,直到遇到句点为止。但代码中存在一个逻辑错误。

- 当输入小写字母时,先转换为大写,但紧接着又判断它是否为大写字母,此时它已经是大写,所以会再次转换回小写,导致小写字母最终输出小写。
- 当输入大写字母时,第一个条件不满足,第二个条件判断为大写,转换为小写,输出小写。
- 因此,所有字母最终都会输出小写,而不是预期的大小写互换。

- 提示:思考一下,如果字符是小写字母,经过第一次转换后变成了大写,那么第二次判断的条件是否还会成立?如何避免这种连续转换?
- 提示:可以尝试使用 `else if` 来确保每个字符只进入一个分支,或者先判断字母类型再决定转换方向。