Ir para conteúdo
Fórum Script Brasil
  • 0

Pequenas funções, grandes negócios!


Aristóteles

Pergunta

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.

Editado por Aristóteles
ajustes
Link para o comentário
Compartilhar em outros sites

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

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...