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
相关产品推荐
相关产品推荐

