1、使用文本形式打开,即指定文件模式不含有 'b '的话,在读取时底层(fgetc,fgets,fscanf)会将各种系统(MS-Dos,MS-Window,Macitonish,Unix)下的行结束符(分别是\r\n,\r\n,\r,\n)转换成统一的\n,因此可以通过如下方式判定:
#define BUF_MAXLEN 100
char buf[BUF_MAXLEN];
FILE *fp = NULL;
/*
* OPEN IT AS TEXT FILE.
*/
while(fgets(buf, BUF_MAXLEN, fp))
{
if(buf[0]== '\n ')
{
//打印空行信息,例如fputs( "***empty line\n ", stdout);
}
else
{
/*
* 打印出来,注意buf中可能已经有 '\n '(一行没有读完),
* 也可能没有(此次读到行结束符)
**/
}
}
2、使用二进制形式打开,你需要自己处理不同的行结束符,当然如果你要处理最后一行那么还应该处理不同系统下的文件结束符(实际上处理msdos- '\032 '就可以了)
3、具体实现细节请看上帖,改正
//Line end-sign based on the above processing
if(buf[0] == '\n ' || buf[0] == '\0 ')
// empty line
{
fputs( "***empty line\n ", stdout);
}
应为:
//Line end-sign based on the above processing
if(buf[0] == '\n ')
// empty line
{
fputs( "***empty line\n ", stdout);
}
#define BUF_MAXLEN 100
char buf[BUF_MAXLEN];
FILE *fp = NULL;
/*
* OPEN IT AS TEXT FILE.
*/
while(fgets(buf, BUF_MAXLEN, fp))
{
if(buf[0]== '\n ')
{
//打印空行信息,例如fputs( "***empty line\n ", stdout);
}
else
{
/*
* 打印出来,注意buf中可能已经有 '\n '(一行没有读完),
* 也可能没有(此次读到行结束符)
**/
}
}
2、使用二进制形式打开,你需要自己处理不同的行结束符,当然如果你要处理最后一行那么还应该处理不同系统下的文件结束符(实际上处理msdos- '\032 '就可以了)
3、具体实现细节请看上帖,改正
//Line end-sign based on the above processing
if(buf[0] == '\n ' || buf[0] == '\0 ')
// empty line
{
fputs( "***empty line\n ", stdout);
}
应为:
//Line end-sign based on the above processing
if(buf[0] == '\n ')
// empty line
{
fputs( "***empty line\n ", stdout);
}