你是否真的会用C语言逐行读取文本文件中的串?(请不要栽倒在诡异的feof上)

      之前说过诡异的feof, 也说过如何用C++逐行读取文本文件的串。但是,如果用C语言去做,就不那么简单了,尽管看似简单。下面是正确的程序,需要好好琢磨。我曾经在这个小问题上浪费不少时间,大家引以为戒。

 

      直接上代码(读取的时候,忽略空行):

#include <stdio.h>
#include <string.h>

int main()
{
	char buf[100] = {0};
	FILE *fp = fopen("1.txt", "r");
	
	while(!feof(fp))
	{
		/*
		为了防止feof多读取最后一行的问题,设文本文件的3行为:
		1行 a
		2行 b
		3行为空

		如果没有下面这个判断,那么程序会多读一行,错误!诡异的feof!
		*/
		if(NULL == fgets(buf, sizeof(buf), fp))
		{
			continue;
		}

		/*
		下面语句的作用是过滤掉空行,当然,如果你不想滤掉空行,那也不是去掉下面这个部分那么简单
		设文本文件的3行为:
		1行 a
		2行 b
		3行为空

		如果仅仅把下面这部分去掉,那么最后的空行也不会显示,因为上面的if中有continue
		*/
		if(0 == strcmp(buf, "\n"))
		{
			continue;
		}

		/*
		设文本文件有3行,记为
		1行 a
		2行 b
		3行 c

        那么读取第1、2行的时候,字符串带了换行符,读取第三行的时候,没有换行符,所以要分别进行处理
		*/
		int len = strlen(buf);
		if('\n' == buf[len - 1])
		{
			buf[len - 1] = '\0'; // 去掉'\n'字符
			len--;
		}

		printf("%s\n", buf);
	}

	fclose(fp);

	return 0;
}


      睡觉。

你可能感兴趣的:(你是否真的会用C语言逐行读取文本文件中的串?(请不要栽倒在诡异的feof上))