Ir para conteúdo
Kézi@

Manipulação de arquivos em linguagem C

Recommended Posts

Boa tarde! Estou tentado resolver essa questão: "Programa recebe nome da OS e nome do contêiner e adiciona e remove itens de acordo com as linhas da OS no contêiner informado. Entrada de item da OS que ultrapassar a capacidade do contêiner não deve ser executada e saída de item da OS que deixam quantidade negativa do item no contêiner também não podem ser executada. Informe quais ações tiveram problema".  Mas o programa não está imprimindo nenhum dado na pasta. segue o programa:

#include <stdio.h>
#include <string.h>
int total_C(char nome[]) {
    char pasta[]="container\\", myString[100], nome_item[100];
    int quantidade, cont=0;
    FILE *container=fopen(strcat(pasta, strcat(nome, ".txt")), "r");
    while (fgets(myString, 100, container)!=NULL) {
        sscanf(myString, "%s %d", nome_item, &quantidade);
        cont +=quantidade;
    }
    fclose(container);
    return cont;
}
void item_in(char item[], char arq[], int q) {
    int chave=0, qtd;
    char pasta[]="container\\", myString[100], nome_C[100];
    FILE *ctr=fopen(strcat(pasta,strcat(arq, ".txt")), "w");
    while(fgets(myString, 100, ctr)!=NULL) {
        sscanf(myString, "%s %d", nome_C, &qtd);
        if (strcmp(item, nome_C)==0) {
            fprintf(ctr, "%s %d", item, qtd+q);
            chave=1;
        }
    }
    if (chave==0) {
        fprintf(ctr, "%s %d", item, q);
    }    
    fclose(ctr);
}
void item_out(char item[], char arq[], int q) {
    int qtd;
    char pasta[]="container\\", myString[100], nome_C[100];
    FILE *container=fopen(strcat(pasta,strcat(arq, ".txt")), "a+");
    while(fgets(myString, 100, container)!=NULL) {
        sscanf(myString, "%s %d", nome_C, &qtd);
        
            if (strcmp(item, nome_C)==0) {
            fprintf(container, "%s %d", item, (qtd-q));
        }
    }
    fclose(container);
}

int main(void) {
    char pasta[]="container\\", nome_OS[100], nome_C[100], myString[100], es[10], item[100];
    int q, capacidade_C;
    
    scanf("%s %s", nome_OS, nome_C);
    
    FILE *lista_C=fopen("container.txt", "r");
    while(fgets(myString, 100, lista_C)!=NULL) {
        int q;
        char c[100];
        sscanf(myString, "%s %d", c, &q);
        if(strcmp(nome_C, c)==0) {
            capacidade_C=q;
        }
    }
    fclose(lista_C);
    FILE *os=fopen(strcat(nome_OS, ".txt"), "r");
    FILE *container=fopen(strcat(pasta,strcat(nome_C, ".txt")), "a+");
    while(fgets(myString, 100, os)!=NULL) {
        sscanf(myString, "%s %s %d", es, item, &q);
        if(strcmp(es, "in")==0) {
            if ((total_C(nome_C)+q)<=capacidade_C && q>=0) { 
                item_in(item, nome_C, q);
                fprintf(container, "%s %d", item, q);
                break;
        }            
        } else {
        if ((total_C(nome_C)+q)<=capacidade_C && q>0) { 
                item_out(item, nome_C, q);
                break;
            }
        }

    }
    fclose(container);
    fclose(os);
    
    return 0;
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.