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

#include <stdio.h> int main(void) { int c; while ((c = getchar()) != EOF) { if (c >= 'A' && c <= 'Z') { c += 32; } else if (c >= 'a' && c <= 'z') { c -= 32; } putchar(c); if (c == '.') { break; } } return 0; }
这段代码的功能是:从标准输入读取字符,遇到大写字母转换为小写,遇到小写字母转换为大写,其他字符不变,然后输出。当遇到句点 '.' 时停止处理。

- 注意大小写转换的逻辑:大写字母加32变成小写,小写字母减32变成大写。但这里有一个问题:在转换后,你检查 c == '.' 时,c 可能已经被修改了。例如,如果输入的是大写字母 'A',它会被转换成 'a',不会触发 break。但如果输入的是 '.',它本身不是字母,所以不会进入 if-else,c 保持为 '.',然后输出并 break。这个逻辑目前是正确的,但需要留意转换后的字符是否可能意外变成 '.'。

- 另一个需要思考的点:程序在遇到 '.' 时立即停止,但 '.' 本身也会被输出。如果希望 '.' 不输出,需要调整输出和 break 的顺序。