Online Compiler C

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

首先,`upper` 函数内部使用了 `while(scanf(...))` 循环,这会导致函数在读取到输入结束前不会返回,而且每次调用都会尝试读取新的字符,而不是只处理传入的参数 `c`。同时,`main` 函数中的循环条件 `x!=14` 是错误的,14 不是换行符的 ASCII 码(换行符是 10),这会导致循环无法按预期结束。

- 在 `upper` 函数中,你不需要使用 `scanf` 循环。函数应该只处理传入的单个字符 `c`,并返回转换后的结果。检查一下如何直接对参数 `c` 进行大小写转换,而不引入新的输入操作。
- `main` 函数中的循环条件 `x!=14` 可能不是你想要的效果。思考一下你希望循环在什么条件下结束,比如读取到换行符或文件结束符时。