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

#include <stdio.h> int main(void) { char 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; }
这段代码的功能是:从输入中逐个读取字符,如果是大写字母则转换为小写,如果是小写字母则转换为大写,其他字符不变,然后输出。当遇到句号时停止。

- 变量 `c` 被声明为 `char` 类型,但 `getchar()` 返回的是 `int` 类型(为了能表示 `EOF`)。当 `c` 是 `char` 时,可能无法正确判断 `EOF`,尤其是在某些系统上 `char` 默认是无符号的。这会导致循环条件可能出错,比如无法正常结束输入或提前退出。
- 大小写转换的逻辑是正确的,但需要注意:在转换后,`c` 的值改变了,紧接着的 `if (c=='.')` 判断的是转换后的字符。如果输入的是大写字母 `A`,转换后变成 `a`,不会触发 `break`;但如果输入的是小写字母 `a`,转换后变成 `A`,也不会触发 `break`。只有输入本身就是句点时才会停止。这个行为可能符合预期,但需要确认是否要在转换前判断句点。