从txt文件中读取C中的字符串

时间:2017-12-06 23:21:59

标签: c string file

我试图从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);

我做错了什么?当我打印城市名称时,什么都没有出现!

1 个答案:

答案 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变量在循环中分配,因此每次都设置为零。