关于C#:使用fscanf()跳过字符串


Using fscanf() to skip a string

输入文件的第一行包含一个字符串,后跟一个整数,第二行包含一个字符串,后跟2个整数。 我的以下代码运行良好,但是有没有办法跳过字符串? 我只是用一些字符数组char sink [30]进行扫描。 实际上,我不需要此值,如何使用fscanf()跳过此字符串并仅读取整数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#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\
"
);
    for(i=0;i<v;i++)
        printf("%d %d\
"
,p[i],q[i]);
    return 0;
}


要丢弃scanf中的数据,请在格式说明符之间使用星号,例如%*s%*c等。对于fscanf来说也是相同的。 只需添加一个星号即可扫描并丢弃字符串:

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

这将扫描文件中的字符串,将其丢弃,然后扫描并将整数分配给v。 您可以为第二个fscanf做同样的事情:

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

如果您的输入是面向行的,那么最好使用面向行的输入。 如fgets(),它使您可以阅读整行。 当然,跟踪读取行是否为第一行很容易。

也:

  • 您应该检查fscanf()(和其他I / O函数)的返回值,因为它们可能会失败。
  • 不要在C中强制转换malloc()的返回值。