在线编译器 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(c)) return 0; }
这段代码试图实现一个字符大小写转换的功能,但存在多个问题。代码中有一个循环不断读取输入,直到遇到句点,同时尝试将小写字母转大写、大写字母转小写。但主函数中的调用和变量使用有错误。

- 主函数中 `printf("%c",upper(c))` 使用了未定义的变量 `c`,应该使用 `a`。同时 `upper` 函数的设计逻辑混乱,它不应该在内部用循环读取新字符,而是应该只处理传入的单个字符。

- `upper` 函数内部用 `while` 循环不断读取字符,这会导致它忽略传入的参数 `c`,并且函数最终只返回最后一个字符(即句点),而不是转换后的结果。你需要重新思考函数应该只处理一个字符,而不是负责输入。