Jump to content

fazer printf num ficheiro de baixo para cima


LiK
 Share

Recommended Posts

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 😁

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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!  😁

here since 2009

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
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
 Share

×
×
  • Create New...

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.