使用fscanf()跳过字符串
输入文件是这样的,它在第一行有一个字符串后跟一个整数,从第二行开始,它有一个字符串后跟2个整数。 我的下面的代码运作良好,但有没有办法跳过字符串? 我只是用一些字符数组char sink [30]扫描它。 实际上我不需要这个值如何使用fscanf()来跳过这个字符串并只读取整数。
#include #include int main() { int v,i=0,f=1; static int *p,*q; FILE *fp; char sink[30]; fp = fopen("some.txt","r"); while(!feof(fp)) { if(f) { fscanf(fp,"%s %d",sink,&v); p = (int *)malloc(sizeof(int)*v); q = (int *)malloc(sizeof(int)*v); f=0; } else { fscanf(fp,"%s %d %d",sink,&p[i],&q[i]); i++; } } fclose(fp); printf("The input vertices are\n"); for(i=0;i<v;i++) printf("%d %d\n",p[i],q[i]); return 0; }
要丢弃scanf
数据,请在格式说明符之间使用星号,例如%*s
, %*c
等。对于fscanf
这是相同的。 只需添加一个星号即可扫描并丢弃该字符串:
fscanf(fp,"%*s %d",&v);
这将扫描文件中的字符串,将其丢弃,然后扫描并为v
分配一个整数。 你可以为你的第二个fscanf
做同样的事情:
fscanf(fp,"%*s %d %d",&p[i],&q[i]);
如果您的输入是面向行的,那么使用面向行的输入要好得多。 比如fgets()
,它可以让你读取整行。 当然,跟踪读取线是否是第一个是非常容易的。
也:
- 你应该检查
fscanf()
(以及其他I / O函数)的返回值,因为它们会失败。 - 不要在C中
malloc()
的返回值 。