简体   繁体   中英

Using fscanf() to skip a string

The input file is such that it has a string followed by an integer on first line and from second line it has a string followed by 2 integers. My below code works well but is there a way to skip the string ? I am just scanning it with some character array char sink[30]. Actually I don't need this value how can I use fscanf() to skip this string and just read integers.

#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;
}

For discarding data in scanf you use an asterisk in between the format specifier such as %*s , %*c etc. This is the same for fscanf . Simply add an asterisk to scan and discard the string:

fscanf(fp,"%*s %d",&v);

This will scan a string from the file,discard it and will then scan and assign an integer to v . You can do the same for your second fscanf :

fscanf(fp,"%*s %d %d",&p[i],&q[i]);

If your input is line-oriented, it's much better to use line-oriented input. Such as fgets() , which lets you read whole lines. Keeping track of whether or not the read line is the first or not is pretty easy, of course.

Also:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM