当前位置: 代码迷 >> 综合 >> fgets()函数和fputs函数
  详细解决方案

fgets()函数和fputs函数

热度:43   发布时间:2023-12-24 09:50:06.0

fgets()函数原型:char *fgets(char *line,int maxline,FILE *fp)


fgets()函数从fp指向的文件中读取下一个输入行,(包括换行符,这点与gets()不同,gets()会自动的丢弃换行符),并将它存在数组之中,它最多读取maxline-1t个字符读取的行将以'\0'结尾保存到数组中,结束的条件是读入maxline-1个字符或者读到第一个换行符,通常条件下,fgets()将返回line,但如果遇到文件结尾或者发生错误,返回NULL

fgets()函数函数的第三个参数是指明要读如的文件,但是如果从键盘输入的数据,则以stdin标准输入作为参数,该标识符定义在stdio.h中

fputs()函数原型:int puts(char *line,FILE *fp)

输入函数fputs,将一个字符串(不自动添加换行符,而puts()会自动添加换行符),写入到一个文件中,如果要显示在计算机显示器中,应使用stdout标准输出作为参数,该标识符定义在stdio.h中

当输入的字符小于maxline-1时

#include<stdio.h>
void main()
{
    char str[10];
    fgets(str, 10, stdin);
    puts(str);
    fputs(str, stdout);
    printf("end");
    system("pause");
}



输入的hello,比fgets()读入的输入行短,因此,  hello\n\0被存储在数组中,而puts()显示该字符串hello\n\0又在末尾自动添加了换行符,因此输入的hello后面有一个空行,而fputs不会自动添加换行符,只会输出hello\n\0所以下一行是end

当输入的字符等于maxline-1时



输入的hello,wor比fgets()读入的输入少一,因此,  hello,wor\0被存储在数组中,而puts()显示该字符串hello,wor\0又在末尾自动添加了换行符,因此,下一行就输出了,而fputs不会自动添加换行符,所以后面直接是end


当输入的字符大于maxline-1时


和上面是等于是相同的


#include<stdio.h>
void main()
{
    char str[10];
    puts("enter string");
    while (fgets(str, 10, stdin) != NULL&&str[0] != '\n')
    {
        fputs(str, stdout);
    }
    puts("end");
    system("pause");
}


这个程序中,输入过长的没有问题,程序中的fgets()第一次读入9个字符,并储存为hello,wor\0,接着fputs打印该字符串,进入循环后,读入ld,i love\0并储存ld,i love\0,接着fputs打印,最后 you\n\0读入储存,由于字符串中的\n,所以打印到下一行开始处


如果要丢弃换行符,可以使用:

while(getchar()!='\n')

continue;