Online Compiler C

#include <stdio.h> int main() { char c; scanf("%c", &c); while (c != '.') { if (c != ' ') printf("%c", c); else { printf("%c", c); while (c == ' ') { scanf("%c", &c); if (c != ' ') printf("%c", c); } } scanf("%c", &c); } return 0; }
这段代码的功能是从输入中读取字符,遇到句点 '.' 时停止,并将输入中的连续空格压缩为单个空格后输出。代码逻辑基本正确,但有一个潜在问题。

- 在内层 while 循环中,当遇到空格时,你读取下一个字符并判断是否打印。但如果连续空格很多,内层循环结束后,外层循环会再次执行 scanf 读取下一个字符,这可能导致跳过一个非空格字符。注意内层循环已经读取了下一个字符,外层循环又读取一次,会造成字符丢失。

- 考虑当输入是 "a  b." 时,代码会如何处理?可以手动模拟一下字符读取的顺序,看看是否每个非空格字符都被正确输出。