获取寄存器文本文件的第一个计数

时间:2018-05-07 20:06:34

标签: c string file text

我只是根据文本文件制作简单的数据表,我希望获得最后一行文本的第一个数字。

例如;

1 John Smith johnsmith@example.com 312424 NewYork
2 John Duck  johnduck@example.com 312424 NewYork
3 John New johnnew@example.com 312424 NewYork
4 John Young johnyoung@example.com 312424 NewYork

我只想将最后一行(John Young)的计数(4)分配给一个整数变量。

我试着这样:

while(feof(fptr)==0)
    {

        char isim[20]="";
        char soyisim[20]="";
        char telefon[20]="";
        char mail[20]="";
        char sehir[20]="";


            fscanf(fptr,"%d",&tmp2);
            fscanf(fptr,"%s",isim);
            fscanf(fptr,"%s",soyisim);
            fscanf(fptr,"%s",telefon);
            fscanf(fptr,"%s",mail);
            fscanf(fptr,"%s",sehir);

            printf("%d\n",tmp2);

    }

当打印tmp2作为计数时,它会打印奇怪的数字。

1 个答案:

答案 0 :(得分:1)

当您关心线条时,使用fgets读取线条是个好主意。然后使用sscanf从行中提取数据。请注意,当fgets返回NULL时,循环停止。这表明您已到达文件末尾。

此外,我们仅在count返回6时更新数组中的sscanf条目。sscanf返回成功转化的数量,我们预计每行有6个项目。因此,如果sscanf没有返回6,则该行无效(例如,可能是文件末尾的空行)。

typedef struct
{
    int  number;
    char isim[32];
    char soyisim[32];
    char mail[128];
    char telefon[28];
    char sehir[32];
}
Info;

#define MAX_INFO 100
static Info infoArray[MAX_INFO];

int parseFile(FILE *fp)
{
    char line[256];
    int count = 0;
    while (fgets(line, sizeof(line), fp) != NULL)
    {
        Info *iptr = &infoArray[count];
        if (sscanf(line, "%d%31s%31s%127s%27s%31s", &iptr->number, iptr->isim, iptr->soyisim, iptr->mail, iptr->telefon, iptr->sehir) == 6)
            count++;
        if (count == MAX_INFO)
            break;
    }

    printf("Here is the info:\n");
    for (int i = 0; i < count; i++)
    {
        Info *iptr = &infoArray[i];
        printf("%d %s %s\n", iptr->number, iptr->isim, iptr->soyisim);
    }

    return count;
}

鉴于问题中显示的输入,此代码的输出为:

  

这是信息:
  1约翰史密斯   2 John Duck
  3 John New
  4 John Young