我试图从txt文件中读取一些字符串。 每行有一个5位数字,一个占据51个字符(包括空格)的全名,2个城市名称,每个占用11个字符,包括空格和一个数字。例如:
12345António Manuel Silva Mendes Frankfurt Varsovia 1
我现在可以扫描前两个字符串,但我无法扫描城市名称,也无法扫描最后一个字符串。
这是结构:
typedef struct bilhete{
int BI;
char nome[51];
char partida[11];
char chegada[11];
int data[2];
}BILHETE;
这就是我阅读文件的方式
while(!feof(fp)){
fscanf(fp,"%d%51[^\n]s%11c%11c%d\n", &bilhete.BI, bilhete.nome, bilhete.partida, bilhete.chegada, &bilhete.data);
我做错了什么?当我打印城市名称时,什么都没有出现!
答案 0 :(得分:0)
由于您有固定列,我会考虑只读取数据并使用以下内容进行自己的扫描:
char linein[200];
char *p;
while (fgets(linein, sizeof(linein), fp))
{
char biBuf[10]={0};
char dataBuf[10]={0};
p=linein;
memcpy(biBuf,linein,5);
bilhete.BI=atoi(biBuf);
p+=5;
memcpy(bilhete.nome,p,51);
p+=51;
memcpy(bilhete.partida,p,11);
p+=11;
memcpy(bilhete.chegada,p, 11);
p+=11;
memcpy(dataBuf,p,2);
bilhete.data[0]=atoi(dataBuf);
printf("%.51s %d\n",bilhete.nome, bilhete.data[0]);
}
我不确定你想对数据变量做什么,但这会给你一个整数。观察,biBuf和dataBuf变量在循环中分配,因此每次都设置为零。