我一直在尝试使用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 );
我该怎么做?
提前致谢
答案 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;
}