Ir para conteúdo
Fórum Script Brasil

LoSt_

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que LoSt_ postou

  1. 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
×
×
  • Criar Novo...