在线编译器 C

#include <stdio.h> int main(void) { int c; if (c == '.') { break; } while ((c = getchar()) != EOF) { if (c >= 'A' && c <= 'Z') { c += 32; } else if (c >= 'a' && c <= 'z') { c -= 32; } putchar(c); } return 0; }
这段代码试图读取输入字符,遇到句点就停止,并转换字母大小写后输出。但代码的逻辑顺序有问题。

- 你的 `if (c == '.') { break; }` 放在了 `while` 循环之前,此时 `c` 还没有被赋值(未初始化),所以这个判断没有意义,而且 `break` 不能用在循环外面。
- 大小写转换的循环会一直运行到文件结束,不会在遇到句点时停止。

- 提示1:把判断句点的条件移到 `while` 循环内部,在读取字符之后、处理大小写之前检查。
- 提示2:注意 `break` 只能用在循环或 `switch` 语句中,不能放在循环外面。