使用Fscanf解析特定的输入文件

时间:2012-07-01 02:40:04

标签: c parsing scanf

我一直在尝试使用fscanf读取我的应用程序上的输入文件。

这是输入文件

3
Process#1 - 2Kb
3
exec 20

io 5

exec 50

Process#2 - 8Kb

1

exec 100

Process#3 - 8Kb

4

exec 50

io 50

exec 50

io 50

首先,我想阅读第一个“3”,我没有遇到任何问题。

之后,我需要读取#(即1)之后的信息和“kb”字符串后面的数字(即2)。

为什么这个fscanf没有这样做?

fscanf(inputFile, "Process#%d - %dKb", &id, &mem ); 

我该怎么做?

提前致谢

1 个答案:

答案 0 :(得分:3)

可能是因为3中的P无法识别Process之后留下的换行符。

这就是许多人避免scanf()的原因;使用fgets()或相关函数(但 gets()!)通常更简单,然后使用sscanf()


演示代码

请注意严格检查scanf()的回报。如果你不这样做,你就不会知道什么时候出错了。请注意,检查也是针对正确的转化次数。

#include <stdio.h>
int main(void)
{
    int i;
    int id;
    int mem;

    if (scanf("%d", &i) != 1)
        printf("oops!\n");
    /* With    space - reads past newline on first line */
    /* Without space - prints 'thank goodness!' */
    if (scanf(" Process#%d - %d", &id, &mem) != 2)
        printf("thank goodness!\n");
    return 0;
}