Online Compiler C

#include <stdio.h> char upper(char c){ while((c=getchar())!='.'){ int C=c+'A'; c='a'-C; } return c; int main() { char x,answer; scanf("%c",&x); answer = upper(x); printf("%c",answer); return 0; }
这段代码试图将小写字母转换为大写字母,但存在几个问题。

首先,函数 `upper` 内部使用了 `while` 循环不断从输入读取字符,直到遇到句点,这与你期望的只处理一个字符的逻辑不符。其次,字符转换的表达式 `c+'A'` 和 `'a'-C` 是错误的,它们没有正确计算大小写字母的差值。

- 函数 `upper` 应该只处理传入的参数 `c`,而不是从标准输入读取新字符。检查函数内部是否应该使用 `while` 循环。
- 大小写字母转换的正确思路是利用 ASCII 码中大小写字母的固定差值。思考一下小写字母 `'a'` 和大写字母 `'A'` 的数值关系,以及如何用这个差值进行转换。