Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

LiK

fazer printf num ficheiro de baixo para cima

Mensagens Recomendadas

LiK

boa pessoal! tenho um problema um bocado estúpido...

tenho uma variavel i, que começa em 1 e acaba em 20... Queria que ele fizesse fprintf, num ficheiro criado (ja esta criado), mas de baixo para cima... Isto é: o ficheiro output vai ter de ficar:

{

20

19

...

1

}

existe alguma função para fazer isso?

obrigado pessoal :cheesygrin:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
LiK

nao posso fazer com array, a variavel tem de ser imprimida com o fprintf e depois é decrementada...

ah, e nao da para fazer (20-i), tem de começar mesmo no 20 e acabar no 1, porque a frente disso tenho de imprimir mais coisas...

é para fazer o tetris, e o tetris começa do fundo para o cimo...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Revertes o array. Não dá?

scorch, ele não falou em array nenhum, acho que só quer mesmo meter os números de 1 a 20 em ordem inversa.

LiK, e que tal em vez da variável ser inicializada com 1, ser inicializada antes com 20 e depois ser decrementada ao longo de um loop até ser igual a 1?

Se não era isto que querias, explica melhor! para que te possam ajudar.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

nao posso fazer com array, a variavel tem de ser imprimida com o fprintf e depois é decrementada...

ah, e nao da para fazer (20-i), tem de começar mesmo no 20 e acabar no 1, porque a frente disso tenho de imprimir mais coisas...

é para fazer o tetris, e o tetris começa do fundo para o cimo...

Lol, disseste tudo.

Btw, 1000 posts!  :cheesygrin:


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
LiK

Desculpem se nao me consegui explicar bem...

É assim... Eu tenho um ficheiro com a linha coluna e a peça do tetris que vou ter de imprimir...

Agora, antes disso ele tem de ordenar as linhas...

do género:

20

19

...

5      R

4      R

3 YY  R

2 YY

1 VVVV

e a peça VVVV (cor verde) é a primeira a ser lida do ficheiro input, fica na linha 1

o problema aqui é que o fprintf começa a imprimir as coisas de cima para baixo, portanto, o ficheiro output vai ter de ficar no primeiro loop do ciclo como:

1 VVVV

depois

2 YY

1 VVVV

depois

3 YY R

2 YY

1 VVVV

portanto tem de imprimir de baixo para cima...

nao se se ainda me expliquei bem... :S

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Calculo que exista uma função para te pôr umas linhas à frente no ficheiro mas uma maneira pouco eficiente de o fazer, no entanto, não deixa de ser uma solução era, supondo é claro que são só 20 linhas:

int k = 0,i = 0;
for(k = 20; k >= 0; k--) {
  for(i = 0; i < k; i++) {
    fprintf(out,"\n");
  }
  fprintf(out,"%i %s\n", k, "blah");
}

Não experimentei o código mas acho que funciona, experimenta.

Ele tem uma variável que vai ser decrementada, depois incrementa outra variável k vezes e ignora essas linhas imprimindo apenas um \n. Depois imprime na realidade o que queremos.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
LiK

experimentei, e ele so imprime a ultima linha do primeiro for, a dizer: 20 blah

o resto ele so escreve \n...

no fundo, quando ele entra no segundo ciclo for, ja nao sai de la e o k nao e decrementado...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Que parvoíce a minha. Desculpa.

Utiliza a função fseek.

edit: Também podes tratar internamente tudo e depois metes no ficheiro.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Também podes tratar internamente tudo e depois metes no ficheiro.

Eu iria por aqui. Criar um array de arrays de char que representam as linhas a escrever no ficheiro (pelo que dás a entender, são sempre 20, e suponho que o número de caracteres por linha também seja sempre o mesmo). Escreves o output no array, e por fim escreves no ficheiro.

Senão, caso não possas mesmo utilizar arrays deste tipo, terás que utilizar o fseek como disse o Localhost.


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fnds

Com o fseek o programa vai escrever por cima, o melhor é mesmo tratares tudo internamente.

Ou então se estiveres a trabalhar com ficheiros *muito* grandes crias um ficheiro temporário, nesse ficheiros fazes o tal printf e depois vais copiar tudo o que está no ficheiro antigo para o temporário e por fim renomeias o temporário.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Com o fseek o programa vai escrever por cima, o melhor é mesmo tratares tudo internamente.

Ou então se estiveres a trabalhar com ficheiros *muito* grandes crias um ficheiro temporário, nesse ficheiros fazes o tal printf e depois vais copiar tudo o que está no ficheiro antigo para o temporário e por fim renomeias o temporário.

Este é um dos grandes problemas de trabalhar com ficheiros directamente.

Pessoalmente, trabalhava dentro do programa e depois mandava tudo para um ficheiro.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.