在线编译器 C

#include <stdio.h> char upper(char c) { while (c != '.') { int position; if (c >= 'a' && c <= 'z') { position = c - 'a'; c = 'A' + position; } else { if (c >= 'A' && c <= 'Z') { position = c - 'A'; c = 'a' + position; } } } return c; } int main() { char a; a = getchar(); printf("%c", upper(a)) return 0; }
这段代码试图将输入的小写字母转为大写,大写字母转为小写,但存在几个问题。

函数 `upper` 中使用了 `while (c != '.')` 循环,这会导致如果输入字符不是 `'.'`,循环会无限执行,因为循环体内没有改变 `c` 的语句来让它变成 `'.'`。实际上,你只需要处理单个字符,不需要循环。

- 检查 `while` 循环的条件和目的。对于单个字符的转换,不需要循环,直接判断并转换即可。
- 注意 `main` 函数中 `printf` 语句后面缺少分号,这会导致编译错误。