今天主要学习了fgetc、fputs、fgets函数的使用规则
fgets
int fgetc(FILE *stream);
功能:
从流中读取下一个字符
参数:
stream:文件流指针
返回值:
成功返回读到字符的ASCII码值
失败返回EOF
读到文件末尾返回EOF
示例:编写程序统计文件的行数
该示例主要统计stdio.h文件中的行数
#include<stdio.h>
int main(void)
{
FILE *p = NULL;
p = fopen("/usr/include/stdio.h","r");
if(NULL == p)
{
perror("fail to fopen!");
return -1;
}
char ch;
int i = 0;
while(EOF != (ch = fgetc(p)))
{
if('\n' == ch)
{
++i;
}
}
fclose(p);
printf("line = %d\n",i);
return 0;
}
fgetc/fputc与getchar/putchar的区别
char ch = 0;
ch = getchar();
ch = fgetc(stdin);
char ch = 'a'
putchar(ch);
fputc(ch, stdout);
示例:实现将一个文件中的内容拷贝到另一个文件中
我们首先在file.txt文件中写入hello world china!,将其拷贝到a.txt文件中
#include<stdio.h>
int main(void)
{
FILE *src = NULL;
FILE *dest = NULL;
char ch;
src = fopen("file.txt","r");
dest = fopen("a.txt","w");
if(NULL == src || NULL == dest) //打开失败,直接返回
{
perror("fail to fopen");
return -1;
}
while(EOF != (ch = fgetc(src)))
{
fputc(ch,dest);
}
printf("save success!\n");
fclose(src);
fclose(dest);
return 0;
}
可以看到,复制文件成功。
fputs
int fputs(const char *s, FILE *stream);
功能:
向流中写入一个字符串
参数:
s:字符串首地址
stream:文件流指针
返回值:
成功返回非负数
失败返回EOF
示例:在file.txt文件中写入:hello world!
#include<stdio.h>
int main(void)
{
FILE *stream;
stream = fopen("file.txt","w");
char s[20] = "hello world!";
if(NULL == stream)
{
perror("fail to fopen");
return -1;
}
fputs(s,stream);
printf("success!\n");
fclose(stream);
return 0;
}
结果:
fgets
char *fgets(char *s, int size, FILE *stream);
功能:
从流中读取一个字符串
参数:
s:存放字符串空间首地址
size:最多读取字符的个数
stream:文件流指针
返回值:
成功返回存放字符串空间的首地址
失败返回NULL
读到文件末尾返回NULL
示例:刚刚在file.txt文件中写入了字符串,现在将其输出出来
#include<stdio.h>
int main(void)
{
FILE *src = NULL;
src = fopen("file.txt","r");
char ch[20];
if(NULL == src)
{
perror("fail to fopen");
return -1;
}
fgets(ch,sizeof(ch),src);
printf("%s\n",ch);
fclose(src);
return 0;
}
结果: