Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
LiK

fazer printf num ficheiro de baixo para cima

Recommended Posts

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:

Share this post


Link to post
Share on other sites
scorch

Revertes o array. Não dá?


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
LiK

nao consigo...

mais logo vejo isso...

ja consegui qualquer coisa, mas ja estou com o cerebro cansado lol

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.