首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

用C语言读取文件是遇到空值怎么办?求指点

2013-06-25 
用C语言读取文件是遇到空值怎么处理?求指点4899677730654384207-6月 -10444437403444819547425707-6月 -10

用C语言读取文件是遇到空值怎么处理?求指点
4899677730654384207-6月 -104444
37403444819547425707-6月 -105555
821222268012735413607-6月 -105555
118122339639664229507-6月 -105555
13622333526272206707-6月 -105555
102222281051111307-6月 -105555
30122239230298403507-6月 -10555
123222243511134907-6月 -105555
262222849811117907-6月 -10555
8822226038728807707-6月 -10555
30122292195111165807-6月 -10555
1802222282191119207-6月 -105555
2622228449211116007-6月 -10555
我的代码是:
#include<stdio.h>
#include<stdlib.h>
struct Record
{
   long buyerID;
   long slerID;
   int date_day;
   int date_month;
   int date_year;
   int pinfen[4];
};
main()
{
int i;
struct Record s[13];
FILE *fp1,*fp2;
if((fp1=fopen("F:\\dsr3.txt","r"))==NULL)
printf("Error!");
for(i=1;i<13;i++)
{
fscanf(fp1,"%ld",&s[i].buyerID);
fscanf(fp1,"%ld",&s[i].slerID);
fscanf(fp1,"%d-%d月 -%d",&s[i].date_day,&s[i].date_month,&s[i].date_year);
fscanf(fp1,"%d%d%d%d",&s[i].pinfen[0],&s[i].pinfen[1],&s[i].pinfen[2],&s[i].pinfen[3]);
    printf("%ld\t%ld\t",s[i].buyerID,s[i].slerID);
printf("20%d-%d-%d\t",s[i].date_year,s[i].date_month,s[i].date_day);
printf("%d\t%d\t%d\t%d",s[i].pinfen[0],s[i].pinfen[1],s[i].pinfen[2],s[i].pinfen[3]);
printf("\n");
}
}
但一遇到有空值的地方就出错。遇到有空值的那条记录可以删除。但怎么判断是空值?又怎么删除急求!!
[解决办法]
日期改成“20130413”这样的格式, 程序将简单的多。 
[解决办法]
我看楼主是想操作txt里面的数据。建议用fgets每次读取一行出来,先判断再处理。对于空行,建议忽略,如果确实要删除,只能将文件后面的数据往前移了
[解决办法]
对于有空值的那几种情况,你可以在读入的时候设置一个计数变量,一旦没达到4个数,那么结构数组计数i就不加1,即下面读入的数据把上面有空值的那条记录覆盖。
另外你使用for循环来做这个操作不能判断文件结束符,最好是使用while (!feof(fp){}循环,你可以去查一下feof()函数,它是用来检查fp指针是否到了文件末尾。程序最后请把文件关闭。

热点排行