Jump to content
Fórum Script Brasil
  • 0

Pequenas funções, grandes negócios!


Aristóteles
 Share

Question

O seu programa buga quando um caractere é digitado numa variável int? Não sabe como criar uma string com tamanho dinâmico e lendo os espaços? Não sabe como gravar apenas o tipo correto numa variável? Baseando nesses questionamentos eu escrevi um arquivo cabeçalho contendo algumas funções com códigos criados, recriados e reciclados, que resolvem esses problemas sem buscar ajuda em bibliotecas desconhecidas e antigas.

Baixe o arquivo gotype.h:

 

LINK DIRETO. LINK

 

Coloque o arquivo na mesma pasta em que compilará o programa, e coloque #include “gotype.h”

 

Ou coloque na pasta dos arquivos e funções padrão, e use #include <gotype.h>.

 

Esse arquivo contém as seguintes funções:

 

goint () - Grava e retorna um valor inteiro, e apenas um valor inteiro.

 

gofloat () - Grava e retorna um valor real, e apenas um valor real.

 

gofloatPTBR () - Funciona do mesmo modo que gofloat, mas para quem usa falcon C++ com mingw quando utilizar setlocale (LC_ALL, “Portuguese”) para trabalhar com os números reais é usada a vírgula e não o ponto.

 

tamstring() - Retorna o tamanho da string a ser gravada

 

gostring (char p[]) - Grava a string na string passada por referência.

 

Primeiro, vamos analisar a goint() na seguinte função que imprime uma pirâmide de asteriscos:

#include <stdio.h>
#include <stdlib.h>

int main ()

{

int altura, i, j=1, backup, backup1, espacos=0;

printf ("Digite a altura da piramide: ");

scanf ("%d", &altura);

for (i=1; i<altura; i++)

{

espacos+=1;

}



printf ("\n");

for (i=0; i<altura; i++)

{

backup=j;
backup1=espacos;

while (backup1>=1)

{

printf (" ");

backup1--;

}

while(backup>=1)

{

printf ("*");

backup--;

}


j+=2;
espacos--;

printf ("\n");

}

return 0;

}

 

Neste código,sem usar goint, o programa buga caoticamente se um char é digitado:

tMSXeSB.png

Agora, usando o goint (), não existe problema de o scanf forçar a gravação de um tipo errado e incumbir em um erro caótico:


 

# include <gotype.h>

int main ()

{

int altura, i, j=1, backup, backup1, espacos=0;

printf ("Digite a altura da piramide: ");

//------------------------------------------------

altura=goint();

//altura recebe o retorno da função, não é parâmetro.
//------------------------------------------------

for (i=1; i<altura; i++)

{

espacos+=1;

}



printf ("\n");

for (i=0; i<altura; i++)

{

backup=j;
backup1=espacos;

while (backup1>=1)

{

printf (" ");

backup1--;

}

while(backup>=1)

{

printf ("*");

backup--;

}


j+=2;
espacos--;

printf ("\n");

}

return 0;

}

ZFLjs24.jpg

O gofloat () funciona do mesmo jeito, e um tipo double pode receber o retorno também.


 

# include <gotype.h>

int main ()

{

float f;

printf ("\nDigite um numero REAL: ");

f = gofloat();

printf ("\n\nO número real digitado: %f\n\n", f);

return 0;

}

 

A notação decimal é necessária na gofloat, por isso digitar "22.00" é aceito normalmente.

 

LbMvVfa.png

 

Agora tamstring () e gostring (char a []);


 

# include <gotype.h>

int main ()

{
//para receber o tamanho da string;
int TAM;

printf ("Digite uma string: ");

TAM = tamstring ();

printf ("\n\nTamanho da string: %d", TAM);
  
  //na alocação, somar TAM+1 para embutir o '\0'

char *p = (char*) malloc (TAM+1 * sizeof (char));

if (p==NULL)

{

/*se houver um erro na alocação é importante liberar a variável global e apontá-la para NULL. Por isso sempre use gostring após tamstring, em gostring ela é liberada e recebe NULL.*/

printf ("\nERRO\n");

free (_str_glob);

_str_glob = NULL;
  
exit (1);

}

//p é passada por referência em gostring() .

gostring (p);

printf ("\n\nSua string: %s\n\n\n", p);

free (p);

p = NULL;


return 0;
}

 

 

hmHcSRR.png

 

 

Espero que seja útil. Abraços.

Edited by Aristóteles
ajustes
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...