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

#include <stdio.h> char upper(char c){ if((c)!='.'&&c>='a'&&c<='z'){ int C=c-'a'; c='A'+C; } return c; } int main() { char x,answer; while((x=getchar())!='.'){ answer=upper(x); printf("%c",answer); } return 0; }
这段代码的功能是:从输入中逐个读取字符,遇到句点 '.' 时停止,并将所有小写字母转换为大写字母后输出,其他字符(包括句点本身)保持不变。

代码中有一个逻辑问题:当输入字符是 '.' 时,循环条件 `(x=getchar())!='.'` 会先读取 '.' 并赋值给 x,然后判断为假退出循环,所以 '.' 不会被处理。但你的 `upper` 函数中判断 `(c)!='.'` 是多余的,因为循环已经排除了 '.' 的情况。

- 检查 `upper` 函数中的条件 `(c)!='.'`:既然主循环已经确保传入的字符不会是 '.',这个判断就没有必要了,可以简化。
- 注意 `upper` 函数中 `int C=c-'a';` 这一行:变量名 `C` 容易与字符 'C' 混淆,但这不是错误,只是风格建议。