#include <stdio.h>
#define STLEN 10
int main(void){
char words[STLEN];
int i;
while (fgets(words,STLEN,stdin)!=NULL && words[0]!='\n'){
i = 0 ;
while(words[i]!='\n' && words[i]!='\0'){
i++ ;
}
if(words[i]=='\n'){
words[i]='\0';
}
else{
while(getchar()!='\n'){
continue;
}
}
puts(words);
}
puts("done") ;
}
以上函数为C primier plus中的一串代码,红色部分是我提前一直不是非常理解,但在终端运行中,我发现如果删除了红色部分,那么就会出现下面的结果
即不能在切割,因此,这段很有必要,
后来我发现这主要因为我的一个误区,即对getchar()函数的工作性质不太了解,
因此在这里我尝试做出解释:
我们知道但我们在终端输出字符串后,字符串会被存储在缓冲区中,而在while循环的作用下,fget()函数会不断的对words进行新一轮的赋值, 直到将缓冲区中的字符串全部读取完毕,那么,如果我们不用那么长的字符串呢?这里提供的解决办法就是利用getchar()函数直接读取缓冲区中的字符,将除开'\n'的字符全部读取,而在下一轮的循环中,因为缓冲区中只剩下了'\n',满足了if的条件因此会被转化为'\0',据此,一个可以得到固定的字符串长度的程序就完成了