一、fgetc
1、从流中读取下一个字符
下一个的意思是紧跟在指针后面的,对于一个刚打开文件的流,指针在文件的最前面,它的下一个字符就是文件的第一个字符。读完第一个字符后,指针就会走到第一个字符后面,这时它的下一个字符就是第二个字符了..........
2、返回
以无符号字符的形式读取字符,然后转换为int返回
如果到了文件结尾,或者遇到错误,就返回EOF
3、示例代码
#include<stdio.h>
int main(int ac,char* av[])
{
FILE *fp;
int c;
fp = fopen(*++av,"r");
if( (c=fgetc(fp)) != EOF ){
putchar(c);
}else{
printf("EOF");
}
printf("\n");
fclose(fp);
return 0;
}
演示
二、fgets
1、手册解释
fgets最多读取一份字符,这份字符的字符数量小于size
读取的字符存储在s所指向的缓冲区中
在EOF或换行后停止读取
终止的空字节('\0')存储在缓冲区的最后一个字符之后
fgets在读取成功的时候返回s
fgets在遇到错误或还没有读取到字符就到了文件结尾时,返回NULL
2、演示代码
#include<stdio.h>
#include<stdlib.h>
int main(int ac,char* av[])
{
FILE *fp;
int size;
int count=0;
fp=fopen(*++av,"r");
size=atoi(*++av);
count=atoi(*++av);
char buffer[size];
while( count > 0 )
{
if(fgets(buffer,size,fp)!=NULL){
fputs(buffer,stdout);
}else{
printf("NULL\n");
}
--count;
}
fclose(fp);
return 0;
}
3、演示
(1)所读取的字符数量小于size
size设置为5,但却只读取到4个字符,
(2) 遇到换行后停止读取
第19个字符为换行字符,后面不再读取
(3)遇到换行后停止读取,下次读取时,从下一行开始读
(4)遇到错误或还没有读取到字符就到了文件结尾时返回NULL
三、getc
getc和fgetc是等价的
有个例外???
四、getchar
getchar等价于getc(stdin)
除去那个例外情况,getchar也应该等价于fgetc(stdin)
五、对比
1、fgets和其他
fgetc、getc、getchar的返回值类型都是int
fgets的返回值类型是char*
2、getchar与fgetc
getchar等价于fgetc(stdin)
3、fgetc和fgets
fgetc等价于fgets(buffer,2,fp)
4、getchar与fgets
getchar等价于fgets(buffer,2,stdin)