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");
}
Pergunta
LoSt_
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*/
/*Arquivo PROGRAMA_FINAL.C*/Desde já obrigado!
Att
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.