Разбор TXT файла в C

Упражнение состоит в том, чтобы дать файл TXT, созданный с блоком заметок, который программа читает и анализирует переменным способом, обнаруживая каждое поле текстового файла, распознавая их и, таким образом, имея возможность использовать или отображать их. Моя проблема в том, что while пропускает, как будто файл не существует, но существует. Заранее благодарю за ответ

Main:

#include"prototipos.h"

int main()
{
    FILE *archtxt;


    archtxt= fopen("empleados.txt","r+t");

    if(!archtxt)
    {
        printf(" no se pudo acceder al archivo");
        return 1;
    }

    txt_a_parsear(archtxt);

    fclose(archtxt);

    return 0;
}

Заголовок :

#include"prototipos.h"

int main()
{
    FILE *archtxt;


    archtxt= fopen("empleados.txt","r+t");

    if(!archtxt)
    {
        printf(" no se pudo acceder al archivo");
        return 1;
    }

    txt_a_parsear(archtxt);

    fclose(archtxt);

    return 0;
}

Функции .c :

#include"prototipos.h"

void txt_a_parsear(FILE *txt)
{
    t_empleado emp;
    char linea[TAM];

    fgets(linea,TAM,txt);

    while(!feof(txt))
    {
        parseo_txt_var(linea,&emp);
        fgets(linea,TAM,txt);

    }
}

void parseo_txt_var(char * linea,t_empleado *emp)
{

    char *act = strchr(linea,'\n');

    *act='\0';
    act=strrchr(linea,'|');

    emp->sexo=*(act+1);

    *act='\0';
    act=strrchr(linea,'|');
    sscanf(act+1,"%f",&emp->sueldo);

    *act='\0';
    act=strrchr(linea,'|');

    sscanf(act+1,"%d/%d/%d",&emp->fnac.dia,&emp->fnac.mes,&emp->fnac.ano);

    *act='\0';
    act=strrchr(linea,'|');

    strncpy(emp->apyn,act+1,sizeof(emp->apyn));

    *act='\0';


     sscanf(linea,"%d",&emp->dni);
}
0
задан 05.01.2017, 08:57
0 ответов

Возможно, что ты призываешь неопределенное поведение, так что любая вещь могла бы происходить (функционировать, не функционировать, функционировать некорректно, или призывать демоны, которые вышли бы выстрелившими твоих носовых полостей).

Поскольку я могу видеть, ты используешь распространенный способ чтения ("r+") когда открывать файл одновременно, что ты просишь у него способ текст ("t"). Однако способ текст это мне не кажется снабженным ссылками ни на какую документацию fopen:

Единственная документация, которая ссылается на способ "t" будь в cplusplus.com и написанная перемещенная как что-то не чиновник никакого составителя (перевод и выделенный мои):

Если есть добавочные символы в последовательности, поведение зависит от осуществления книжного магазина: какие-то осуществления могут игнорировать добавочные символы так что например одна "t" добавочный (иногда использованная для explicitar способ текст) был принят.

Если мы консультируем стандарт C, мы видим следующие получающие способы (перевод и выделенный мои):

7.19.5.3 функция fopen

...

  1. Аргумент mode укажи на цепь символов. Если цепь указывает на одного из следующих, файл открывается в указанном способе. В противоположном случае поведение неопределенное:
    • r открой файл для чтения
    • w отсеки в нуль или создай текстовый файл для написания
    • a добавь; открой или создай текстовый файл, чтобы писать в конце файла
    • rb откройся в бинарном способе для чтения
    • wb отсеки в нуль или создай файл в бинарном способе, чтобы писать в конце файла
    • ab добавь; открой или создай файл в бинарном способе, чтобы писать в конце файла
    • r+ открой текстовый файл, чтобы обновлять (читать и писать)
    • w+ отсеки в нуль или создай текстовый файл, чтобы обновлять
    • a+ добавь; открой или создай текстовый файл, чтобы обновлять, указатель написания помещается в конце файла

Так что он помещается, возможность тебя не функционировала из-за способа "t".

0
ответ дан 03.12.2019, 17:52

отключите ноутбук. я хватал ее позже и программа функционировала правильно. я ввожу while в компьютер и parseo в файл. так что у него не было совсем не плохо привета

0
ответ дан 03.12.2019, 17:52