Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda para arquivo "Saida.txt" - Gravando


LoSt_

Pergunta

Bom dia a todos. Sou novo aqui, trabalho hoje com PHP com Magento. Porém como estudar é necessário, estou com um problema em C.

O trabalho está pronto, porém não estou conseguindo salvar o resultado em um arquivo de saída.

Basicamente ele lê um arquivo externo "entrada.txt" e realiza alguns comandos. Feito isso eu teria que gerar um arquivo ''saida.txt'' com a mesma formatação que na impressão "dentro" do programa.

É só pegar o código e compilar, o arquivo externo "entrada.txt" se encontra abaixo também para fazer o programa funcionar

/*ARQUIVO ENTRADA.TXT*/

5
mover      1     acima    2
empilhar      2    acima     4
mover      3    acima    0
mover     0    topo    2
sair
/*Arquivo PROGRAMA_FINAL.C*/
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

struct item
{
    int numero;
};

struct no
{
    struct item umItem;
    struct no *prox;
};

void insereNoInicio(struct no **inicio, struct item umItem)
{
    struct no *novo;
    novo = (struct no *) malloc(sizeof(struct no));
    novo->umItem = umItem;
    novo->prox = *inicio;
    *inicio = novo;
}

int removeDoInicio(struct no **inicio, struct item *umItem)
{
    int underflow;
    struct no *aux;
    if(*inicio == NULL)
    {
        underflow = 1;
    }
    else
    {
        underflow = 0;
        *umItem = (*inicio)->umItem;
        aux = *inicio;
        *inicio = (*inicio)->prox;
        free(aux);
    }
    return(underflow);
}

void insereNoFinal(struct no **inicio, struct item umItem)
{
    struct no *novo, *aux;
    novo = (struct no *) malloc(sizeof(struct no));
    novo->umItem = umItem;
    novo->prox = NULL;

    aux = *inicio;
    while(aux->prox != NULL)
    {
        aux = aux->prox;
    }
    aux->prox = novo;
}


void imprimir(struct no *inicio)
{
    struct no *aux;
    aux = inicio;
    while(aux != NULL)
    {
        imprimirItem(aux->umItem);
        aux = aux->prox;
    }
}

void imprimirItem(struct item umItem)
{
    printf("%i", umItem.numero);
}







main()
{
    int tamanho;
    FILE*fp; //Declaração do ponteiro para leitura do arquivo com os comandos
    if((fp = fopen("entrada.txt", "r")) == NULL) // Verificação se o arquivo se encontra vázio
    {
        printf("\nErro na abertura do arquivo. O mesmo encontra-se vazio.");
    }
    else
    {
        //Lendo o arquivo
        fscanf(fp,"%i", &tamanho);
        printf ("\nValor lido do arquivo: %i\n", tamanho);
    }
    struct no *inicio[tamanho];
    struct item umItem;
    int i,blocoA, blocoB;
    char comando1[10];
    char comando2[10];

    for (i = 0; i < tamanho; i++)
    {
        inicio[i] = NULL;
    }

    for (i = 0; i < tamanho; i++)
    {
        umItem.numero = i;
        insereNoInicio(&inicio[i], umItem);
    }

    for (i = 0; i < tamanho; i++)
    {
        printf("\nPosicao: %i\n ", i);
        imprimir(inicio[i]);
    }

    do
    {
        fscanf (fp, "%s", &comando1);
        printf ("\n\nComando lido do arquivo: %s", comando1);

        if(strcmp(comando1,"sair")==0) //sair
        {
            printf("\n\nPosicoes das filas:\n");
            for (i = 0; i < tamanho; i++)
            {
                printf("\nPosicao: %i ", i);
                imprimir(inicio[i]);
            }
            printf ("\n\nSaindo do aplicativo . . .\n");
        }
        else
        {
            if (strcmp(comando1,"encontrar")==0) //encontrar
            {
                printf ("\n\nEncontrando . . .\n");
                // aqui a chamada da função para executar o processo de encontrar o maior
            }
            else
            {
                if (strcmp(comando1,"mover")==0) //mover
                {
                    printf ("\nMovendo . . .");
                    fscanf (fp, "%i %s %i", &blocoA, &comando2, &blocoB);
                    printf ("\nBloco %i para %s do bloco %i", blocoA, comando2, blocoB);

                    if (strcmp(comando2,"acima")==0)
                    {
                        int origem, destino,underflow,i;
                        origem = blocoA;
                        destino = blocoB;
                        underflow = removeDoInicio(&inicio[origem], &umItem);
                        if(underflow)
                        {
                            printf("\nImpossivel realizar o comando.");
                        }
                        insereNoFinal(&inicio[destino], umItem);
                    }

                    if (strcmp(comando2,"topo")==0)
                    {
                        int origem, destino,underflow;
                        origem = blocoA;
                        destino = blocoB;
                        underflow = removeDoInicio(&inicio[origem], &umItem);
                        if(underflow)
                        {
                            printf("\nImpossivel realizar o comando.");
                        }
                        insereNoInicio(&inicio[destino], umItem);
                    }

                }
                else
                {
                    if (strcmp(comando1,"empilhar")==0) //empilhar
                    {
                        printf ("\n\nEmpilhando . . .");
                        fscanf (fp, "%i %s %i", &blocoA, &comando2, &blocoB);
                        printf ("\nBloco %i para o %s do bloco %i", blocoA, comando2, blocoB);

                        if (strcmp(comando2,"acima")==0)
                        {
                            int origem, destino;
                            origem = blocoA;
                            destino = blocoB;
                            while(inicio[origem]->prox != NULL)
                            {
                                removeDoInicio(&inicio[origem], &umItem);
                                insereNoFinal(&inicio[destino], umItem);
                            }
                        }
                        if (strcmp(comando2,"topo")==0)
                        {
                            int origem, destino;
                            origem = blocoA;
                            destino = blocoB;
                            while(inicio[origem]->prox != NULL)
                            {
                                removeDoInicio(&inicio[origem], &umItem);
                                insereNoInicio(&inicio[destino], umItem);
                            }

                        }
                    }
                    else //comando invalido
                    {
                        printf ("\n\nE R R O. Comando invalido\n");
                    }
                }
            }
        }

    }
    while (strcmp(comando1,"sair")!=0);


    fclose(fp);
    printf("\n\n");
    system ("pause");
}

Desde já obrigado!

Att

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...