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

#include <stdio.h> char upper(char c){ while((c=getchar())!='.'){ int position; if(c>='a' && c<='z'){ position=c-'a'; c= 'A'+position; } 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; }
这段代码试图实现一个字符大小写转换的功能,但存在几个问题。代码从标准输入读取字符,遇到句点停止,并将小写字母转为大写、大写字母转为小写。不过,主函数和函数的设计有矛盾。

- 主函数中先读取一个字符 `a`,然后调用 `upper(a)`,但 `upper` 函数内部又通过 `getchar()` 重新读取输入,导致第一个字符被忽略。同时,`upper` 函数只返回最后一个字符(即句点),而不是转换后的结果。
- 在 `upper` 函数中,`while` 循环会不断读取字符直到遇到句点,但每次循环都会覆盖 `c` 的值,并且对同一个字符同时检查大小写,导致转换逻辑混乱(例如小写字母被转成大写后,又可能被后续的大写判断再转回小写)。
- 主函数最后缺少分号,会导致编译错误。