输入文件是这样的,它在第一行有一个字符串后跟一个整数,从第二行开始,它有一个字符串后跟2个整数。我的下面的代码运行良好,但有没有办法跳过字符串?我只是用一些字符数组char sink [30]扫描它。实际上我不需要这个值如何使用fscanf()来跳过这个字符串并只读取整数。
#include<stdio.h>
#include<stdlib.h>
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;
}
答案 0 :(得分:6)
要放弃scanf
中的数据,请在%*s
,%*c
等格式说明符之间使用星号。这与fscanf
相同。只需添加一个星号即可扫描并丢弃该字符串:
fscanf(fp,"%*s %d",&v);
这将扫描文件中的字符串,将其丢弃,然后扫描并将整数分配给v
。您可以为第二个fscanf
执行相同操作:
fscanf(fp,"%*s %d %d",&p[i],&q[i]);
答案 1 :(得分:0)
如果您的输入是面向行的,那么 更好地使用面向行的输入。例如fgets()
,它可以让你阅读整行。当然,跟踪读取线是否是第一个是非常容易的。
此外:
fscanf()
(以及其他I / O功能)的返回值,因为它们会失败。malloc()
in C。