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*/#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
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.