Онлайн компилятор 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; while('x'!='.'){ answer= upper(x); printf("%c",answer); } return 0; }
这段代码试图将输入的小写字母转换为大写字母,但存在几个逻辑问题。

- 在 `upper` 函数中,你使用 `while` 循环不断从输入读取字符,但函数本意是处理单个字符。循环条件 `(c=getchar())!='.'` 会一直读取直到遇到句点,这导致函数只处理第一个字符后的所有输入,并且返回值是句点前的最后一个字符。
- 在 `main` 函数中,`while('x'!='.')` 是一个无限循环,因为 `'x'` 永远不会等于 `'.'`,所以程序会不断调用 `upper` 并输出结果,但 `x` 变量从未被赋值,导致未定义行为。

- 检查 `upper` 函数中的字符转换逻辑:`c-'A'` 和 `'A'+C` 实际上没有改变字符,因为如果 `c` 是小写字母,`c-'A'` 会得到负数,导致错误结果。你需要考虑如何正确将小写字母转换为大写。
- 思考 `main` 函数中循环的终止条件:你希望程序在遇到句点时停止,但当前条件 `'x'!='.'` 永远为真。应该用变量 `x` 的值来判断是否继续循环。