这个解答是针对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;
}
有人能解释一下为什么在if参数中使用inspace == 0,以及在后面的语句中使用inspace = 1时逻辑是如何工作的吗?
0是否表示输入中的空格?
2条答案
按热度按时间iibxawm41#
C的旧版本没有布尔数据类型“true”和“false”。
相反,他们只是使用整数,并决定
0
意味着“假”,其他任何东西意味着“真”。考虑到这一点,上述代码的一部分可以读为:
从本质上讲,逻辑是这样的:
inspace == FALSE
),则打印一个换行符inspace == TRUE
),则忽略它ckocjqey2#
算法缺陷
虽然比较可能会有一些混乱,但存在算法缺陷。让我们首先处理这个问题。
循环前应使用
inspace = 1;
。在循环后添加
if (!inspace) putchar('\n');
。关于使用
inspace
等双态变量时的比较<stdbool.h>
。它从1999年开始提供。inspace
编码为bool
,而不是int
。不要编写类似
abd == true
或def == false
的代码。不要创建TRUE
或FALSE
。其他改进
使用
<ctype.h>