关于c primer plus fget()函数如何获取并输出规定的字符长度的解释

#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',据此,一个可以得到固定的字符串长度的程序就完成了

猜你喜欢

转载自blog.csdn.net/just_a_fresh_man/article/details/120129540