我只是根据文本文件制作简单的数据表,我希望获得最后一行文本的第一个数字。
例如;
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作为计数时,它会打印奇怪的数字。
答案 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