使用fscanf()跳过字符串

时间:2014-10-23 12:34:45

标签: c

输入文件是这样的,它在第一行有一个字符串后跟一个整数,从第二行开始,它有一个字符串后跟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;
}

2 个答案:

答案 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(),它可以让你阅读整行。当然,跟踪读取线是否是第一个是非常容易的。

此外: