Online Compiler C

#include <stdio.h> char upper(char c) { while ((c = getchar()) != '.') { int position; if (c >= 'a' && c <= 'z') { position = c - 'a'; c = 'A' + position; } else { 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; }
这段代码试图实现一个字符大小写转换的功能,但存在一些逻辑和语法问题。

代码中的 `upper` 函数本意是读取输入直到遇到句点,并对每个字母进行大小写反转。但函数接收了一个参数 `c`,却在循环内部用 `getchar()` 重新赋值,导致传入的参数被忽略。同时,`main` 函数只读取了一个字符就调用 `upper`,这与函数内部的循环逻辑不匹配。

- 在 `upper` 函数中,你使用了 `while ((c = getchar()) != '.')` 循环,这意味着函数会持续从输入读取字符,直到遇到句点。但函数参数 `c` 传入的值被循环中的 `getchar()` 覆盖了,所以传入的字符没有起到作用。思考一下:函数应该处理传入的单个字符,还是应该负责读取整个输入流?
- `main` 函数中 `printf` 语句末尾缺少分号,这是一个语法错误。另外,`main` 函数只读取了一个字符就调用 `upper`,但 `upper` 内部会继续读取更多字符,这可能导致程序行为不符合预期。考虑一下 `upper` 函数的职责应该是什么。