Онлайн компилятор C

#include <stdio.h> int main() { char c; do { c=getchar(); if (c >= 'A' && c <= 'Z') { int letter = c + 32; printf("%c", letter); } else if (c >= 'a' && c <= 'z') { int letter = c - 32; printf("%c", letter); } printf("%c", c); } } while (c != '.') ; return 0; }
这段代码试图读取字符并转换大小写,但存在几个问题。

首先,`do-while`循环的结构有误。`do`后面的花括号没有正确包裹循环体,导致`while`条件被放在了循环外部。这会造成编译错误或逻辑混乱。

其次,代码在转换大小写后,又额外打印了原始字符`c`,导致每个字符被输出两次。例如输入'a'会先输出'A'再输出'a'。

- 检查`do-while`循环的语法:`do`后面必须紧跟花括号包裹的循环体,然后才是`while`条件。
- 思考每个字符应该只输出一次:是输出转换后的结果,还是输出原始字符?当前代码同时做了两件事。