这个程序是K& R书中的C程序设计语言:
编写一个程序将其输入复制到其输出中,用一个空格替换一个或多个空格的每个字符串。
#include<stdio.h>
#define NONBLANK 'a'
int main(void)
{
int c, lastc;
lastc = NONBLANK;
while ((c = getchar()) != EOF){
if ( c != ' ')
putchar(c);
if ( c == ' ')
if (lastc != ' ')
putchar(c);
lastc = c;
}
}
}
我只是想知道这个程序如何在无聊的细节中运作。
答案 0 :(得分:1)
坎。运动?无聊的细节?
#include<stdio.h>
#define NONBLANK 'a' /* a fake char to use later */
main()
{
int c, lastc;
lastc = NONBLANK; /* now last c == char 'a' */
while ((c = getchar()) != EOF){ /* parse input (stdin), char by char */
if ( c != ' ') /* if the char is a *not* a space ..*/
putchar(c); /* then write it on stdout; */
if ( c == ' ') /* if it is a space ..*/
if (lastc != ' ') /*.. and lastc is *not* a space ..*/
putchar(c); /* then write it on stdout; */
lastc = c; /* Make lastc be equal to the current */
/* parsed char, and loop up to while */
}
}
PS:第一次在这里..抱歉格式化混乱。
HTH
- michel macron(又名cmic)
答案 1 :(得分:0)
while
循环继续执行,只要它从stdin
获得的字符不是EOF
:
while((c = getchar()) != EOF)
声明了两个char
变量:c
和lastc
。要使此逻辑起作用,必须知道当前字符和前一个字符。最初,lastc
没有值,但仍然使用它:
if(lastc != ' ')
putchar(c);
当程序启动lastc
时,可能会有一个!= ' '
的垃圾值。当你将它声明为一个合理的值时,定义这个变量是一个非常好的主意:
int c, lastc = ' ';
逻辑如下:
从stdin
读取当前字符。如果它不是空格字符(' '
),则会将其写入stdout
。如果是空格,则仅当前一个字符不是空格时,才会将空格写入stdout
。如果前一个字符是空格,则忽略当前空格,如果stdin
中有一系列空格字符,则只打印一个空格。