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.
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:
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;
}
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.
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;
}
Pergunta
Aristóteles
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:
Neste código,sem usar goint, o programa buga caoticamente se um char é digitado:
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:
O gofloat () funciona do mesmo jeito, e um tipo double pode receber o retorno também.
A notação decimal é necessária na gofloat, por isso digitar "22.00" é aceito normalmente.
Agora tamstring () e gostring (char a []);
Espero que seja útil. Abraços.
Editado por Aristótelesajustes
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.