使用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()的返回值 。