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

C语言《程序设计语言》1-12题代码中inspace变量逻辑疑问

《C程序设计语言》1-12习题代码解析

习题要求:编写程序将输入内容按每行一个单词输出。

给出的解决方案代码如下:

#include <stdio.h>
int main(void)
{
  int c;
  int inspace;

  inspace = 0;
  while((c = getchar()) != EOF)
  {
    if(c == ' ' || c == '\t' || c == '\n')
    {
      if(inspace == 0)
      {
        inspace = 1;
        putchar('\n');
      }
      /* else, don't print anything */
    }
    else
    {
      inspace = 0;
      putchar(c);
    }
  }
  return 0;
}

关于inspace的常见疑问解答

1. 为何在判断条件中使用inspace == 0?

我们的目标是把连续的空白字符(空格、制表符、换行)都当成一个单词分隔符,只输出一次换行。当第一次遇到空白字符时,inspace还是0,这时候输出换行;如果后续再遇到空白字符,inspace已经是1,就不再重复输出换行,避免出现多个空行。这个判断是为了防止连续空白字符触发多次换行。

2. inspace = 1的逻辑是怎样的?

inspace = 1是在标记「当前处于连续空白字符的状态」。当第一次碰到空白字符时,我们输出换行,然后把状态设为1,告诉程序:「已经处理过这个空白分隔了,后面再遇到空白就不用管了」。直到遇到非空白字符(也就是下一个单词的开始),才会把inspace重新设为0,继续输出单词内容。

3. 0是否代表输入中的空格?

不是。inspace是一个状态标记变量:

  • inspace = 0:表示当前处于「非空白状态」,正在输出单词的字符
  • inspace = 1:表示当前处于「空白状态」,已经因为空白输出过换行符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:16:24