You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除多空格的C程序异常:输入m个空格输出m/2个空格求助

问题分析与修复:移除连续空格的C程序逻辑错误

你的代码之所以会出现“m个空格保留m/2个”的问题,核心错误在连续空格的处理逻辑上:

当遇到第二个空格时,你把标记变量n重置为0了,这导致后续的空格又会被误输出。举个例子,输入4个连续空格:

  • 第1个空格:n=0,输出空格,n变为1
  • 第2个空格:n≠0,把n设为0
  • 第3个空格:n=0,再次输出空格,n变为1
  • 第4个空格:n≠0,把n设为0
    最终输出2个空格,也就是m/2个,完全符合你描述的现象。

修正后的代码

正确的逻辑应该是:只输出连续空格中的第一个,后续的空格直接跳过,不要重置标记变量。

#include <stdio.h>

int main(void)
{
  int c;
  int n = 0; // 标记是否已经输出过连续空格的第一个

  printf("Insert one or more strings. Possible double blank spaces will be removed.\n\n");

  while((c = getchar()) != EOF)
  {
    if(c != ' ')
    {
      putchar(c);
      n = 0; // 遇到非空格,重置标记,下次空格可正常输出第一个
    }
    else
    {
      if(n == 0) // 仅在第一个空格时输出
      {
        putchar(c);
        n = 1;
      }
      // 后续空格直接跳过,不做任何操作
    }
  }
  return 0;
}

修正逻辑说明

  • n的作用是记录当前是否处于“连续空格已输出过一个”的状态:n=0代表未进入连续空格状态,n=1代表已经输出过一个空格,后续空格无需处理。
  • 遇到非空格字符时,直接输出并重置n,确保下一次遇到空格时能正确输出第一个。
  • 遇到空格时,只有n=0才输出并将n设为1,后续空格因为n=1会被直接跳过,不会重复输出。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:12:38