在线编译器 C

#include <stdio.h> int main() { char c; do { scanf("%c", &c); if (c >= 'a' && c <= 'z') c = c - 32; else if (c >= 'A' && c <= 'Z') c = c + 32; else if (c=='.') return 0; printf("%c", c); } while (c != '.'); return 0; }
这段代码的功能是:从输入中逐个读取字符,如果是小写字母则转换为大写,大写字母则转换为小写,遇到句点(.)时程序结束。但代码中存在一个逻辑问题。

- 当输入字符是句点时,程序会先执行 `return 0` 直接退出,不会打印句点,但循环条件 `while (c != '.')` 实际上永远不会被检查到,因为 `return` 已经提前结束了程序。
- 注意 `scanf` 会读取包括换行符在内的所有字符,这可能导致意外的行为,比如输入 "a." 时,会先处理 'a',然后处理 '.' 并退出,但换行符可能被忽略或影响后续输入。