关于文件的格式化读取,该如何处理

关于文件的格式化读取
程序的读取部分大致如下
int   i=0,j=0,k=0;
fscanf( "%d|%d|%d ",&i,&j,&k);
在文件中,3个数据为一行,每个数据都有可能是空值,但只要值存在即为int型,比如:
4|\N|5
45|98|34
\N|\N|9

用%d直接读,在碰到\N时就成0,以后的就不读了,比如在第三行时结果为:i=0,j=0,k=0,请问如何才能正确读出文件中的数据?

------解决方案--------------------
先读入字符串中,然后分析字符串中的字符,再看是否转换为数字。
------解决方案--------------------
char str[]= "45|98|34 ";
sscanf(str, "%d|%d|%d ", &i,&j,&k);
------解决方案--------------------
1 读取一行到char 数组中,可以使用 fgets
2 判断是否是数字字符,是则输入,否则后移两个字符位置,重复3次

char str[128]={0};
int index;

fgets(...);
index=0;
if(isdigit(str[index])) sscanf(str+index, "%d ", &i) //是数字,读取到i中
else i=0; //否则赋值为0
...

j 和 k 类似处理,
index 移动到 | 后面第一个位置,
判断是否 isdigit,
然后赋值读取 ..