Ir ao conteúdo

Como substituir uma variavel tipo int para float


cr33d

Posts recomendados

Postado

Ola pessoal,

Estou com um problema, eu tenho que substituir uma variavel tipo int para float em um programa eu troquei os valores armazenados que eram numeros por letras gostaria de saber onde esta meu erro pois nao consigo fazer com que o programa execute os IFS ele compila mas na hora de rodar nao aparecem os resultados.

Este é o original:

#include <stdio.h>

int main(int argc,char **argv)

{

int Escolha = 0;

printf("Escolha--->( 1, 2, 3, 4) e digite.....:");

scanf("%d",&Escolha);

if(Escolha == 1)

printf("\nEscolheu o numero [uM] \n");

if(Escolha == 2)

printf("\nEscolheu o numero [DOIS] \n");

if(Escolha == 3)

printf("\nEscolheu o numero [TRES] \n");

if(Escolha == 4)

printf("\nEscolheu o numero [QUATRO] \n");

else

printf("\nNao foi implementado esta opcao\n");

return 0;

}

Este é o que eu modifiquei:

#include <stdio.h>

int main(int argc,char **argv)

{

float Escolha;

printf("\nEscolha--->( a, b, c, d) e digite.....: \n");

scanf("%[^\n]",&Escolha);

if(Escolha == 'a')

printf("\nEscolheu a letra [A] \n");

if(Escolha == 'b')

printf("\nEscolheu a letra \n");

if(Escolha == 'c')

printf("\nEscolheu a letra[C] \n");

if(Escolha == 'd')

printf("\nEscolheu a letra[D] \n");

return 0;

}

Postado

Porque não usa o tipo char? Esse tipo armazena caracteres.

Exemplo:


#include <stdio.h>

int main(void)
{
char Escolha;

printf("\nEscolha--->( a, b, c, d) e digite.....: \n");
scanf("%c", &Escolha);

if(Escolha == 'a')
printf("\nEscolheu a letra [A] \n");
if(Escolha == 'b')
printf("\nEscolheu a letra [B] \n");
if(Escolha == 'c')
printf("\nEscolheu a letra[C] \n");
if(Escolha == 'd')
printf("\nEscolheu a letra[D] \n");

return 0;
}

Postado
Porque não usa o tipo char? Esse tipo armazena caracteres.

Exemplo:


#include <stdio.h>

int main(void)
{
char Escolha;

printf("\nEscolha--->( a, b, c, d) e digite.....: \n");
scanf("%c", &Escolha);

if(Escolha == 'a')
printf("\nEscolheu a letra [A] \n");
if(Escolha == 'b')
printf("\nEscolheu a letra [B] \n");
if(Escolha == 'c')
printf("\nEscolheu a letra[C] \n");
if(Escolha == 'd')
printf("\nEscolheu a letra[D] \n");

return 0;
}

tipo char eu fiz também mas é que o professor pediu para fazer substituindo por float e letras nos ifs não sei se é alguma pegadinha dele tentei de varias formas mas nao obtive sucesso.

Postado

Eu modifiquei deste jeito :

#include <stdio.h>
#include <cstdlib>

int main(int argc,char **argv)
{

char Escolha;

printf("Escolha--->( a, b, c, d) e digite.....:\n");
scanf("%c",&Escolha);

if(Escolha == 'a')
printf("\nEscolheu o numero [UM] \n");
else if(Escolha == 'b')
printf("\nEscolheu o numero [DOIS] \n");
else if(Escolha == 'c')
printf("\nEscolheu o numero [TRES] \n");
else if(Escolha == 'd')
printf("\nEscolheu o numero [QUATRO] \n");
else
printf("\nNao foi implementado esta opcao\n");

system("pause");

return 0;
}

Não entendi o que você quer fazer direito, você quer colocar letras usando float?

Postado

Isso parece ser pegadinha do professor.

Tipo "float" só permite (pelo menos no MinGW) ler números.

O que daria pra fazer, seria ler o char e comparar com um float.


#include <stdio.h>

int main(void)
{
char Escolha;

printf("\nEscolha--->( a, b, c, d) e digite.....: \n");
scanf("%c", &Escolha);

if( (float) Escolha == 97.0 )
printf("\nEscolheu a letra [A] \n");
if( (float) Escolha == 98.0 )
printf("\nEscolheu a letra [B] \n");
if( (float) Escolha == 99.0 )
printf("\nEscolheu a letra[C] \n");
if( (float) Escolha == 100.0 )
printf("\nEscolheu a letra[D] \n");

return 0;
}

Mas, isso não faz sentido, pois a leitura é de char e a comparação também.

Postado
Isso parece ser pegadinha do professor.

Tipo "float" só permite (pelo menos no MinGW) ler números.

O que daria pra fazer, seria ler o char e comparar com um float.


#include <stdio.h>

int main(void)
{
char Escolha;

printf("\nEscolha--->( a, b, c, d) e digite.....: \n");
scanf("%c", &Escolha);

if( (float) Escolha == 97.0 )
printf("\nEscolheu a letra [A] \n");
if( (float) Escolha == 98.0 )
printf("\nEscolheu a letra [B] \n");
if( (float) Escolha == 99.0 )
printf("\nEscolheu a letra[C] \n");
if( (float) Escolha == 100.0 )
printf("\nEscolheu a letra[D] \n");

return 0;
}

Mas, isso não faz sentido, pois a leitura é de char e a comparação também.

Ta ae exatamente o que ele pediu para eu fazer... eu fiz e coloquei obs de que não vai funcionar.

"Repare no código que a variável Escolha é inteira, faça agora o mesmo código só que com a variável em ponto flutuante, ou seja ao invés int Escolha, vai passar a ser float Escolha, e para o menu de if coloque letras."

Obs: lembrando que o codigo original foi aquele primeiro que eu postei.

Acho que é uma pegadinha mesmo mas valeu ae pela ajuda

Postado

Só queria deixar uma observação sobre meu último exemplo.

Não está sendo feita a conversão da variável "Escolha", mas sim, apenas uma mudança de tipo (typecast) para a comparação.

O valor armazenado na variável, continua sendo do tipo char (4bits).

Postado

Mas se o exercício pede para substituir int para float, não devia ter sido usado char. Ou ele pede para alterar os números para letras?

Basta alterar as seguintes linhas

float Escolha = 0;

scanf("%f",&Escolha);

Postado

Tentei dessa forma, porém, no MinGW, se digitar uma letra, ele não atribui valor para a variável. A atribuição só funciona quando for digitado um número.

Por isso tive de trocar para char e fazer o typecast na comparação.

Postado
Se digitar letra vai dar erro mesmo.

Acho que o exercício não fala nada de char, portanto o usuário deve digitar apenas números.

Então deve ser pegadinha do professor, pois não tem como digitar letras usando float :confused:

Postado

Até dá pra fazer a leitura em um tipo "int", porém, precisaremos limitar o tipo em 8 bits, que é o tamanho do tipo "char".

Além disso, a leitura terá de ser feita usando a máscara "%c" (não descobri uma maneira direta para a leitura do "int" de 8 bits).


int8_t Escolha;

printf("\nEscolha--->( a, b, c, d) e digite.....: \n");
scanf("%c", &Escolha);

if( (float) Escolha == (float) 'a' )
printf("\nEscolheu a letra [A] \n");
if( (float) Escolha == (float) 'b' )
printf("\nEscolheu a letra [B] \n");
if( (float) Escolha == (float) 'c' )
printf("\nEscolheu a letra[C] \n");
if( (float) Escolha == (float) 'd' )
printf("\nEscolheu a letra[D] \n");

Se o professor estava querendo pegar os alunos, pra depois dizer que isso não é possível, está aí a prova de que é possível sim. :P

Mas, acredito que, o nível de programação apresentado em aula, não tenha chegado nesse ponto.

OBS: Pra usar o "int8_t", precisei declarar "inttypes.h" para o MinGW. Talvez, em outras bibliotecas, seja a "stdint.h".

Postado

Eu tinha pensado também em entrar com o número em hexa, no caso, de a até d. Depois, faria algo como ('a' - 87) nos testes. Mas ainda foge à ideia do float, que parece ser a tal pegadinha.

[]'s

LNW

Postado
Então deve ser pegadinha do professor, pois não tem como digitar letras usando float :confused:

Eu acho que o cr33d que se confundiu. Porque trocar números por letras?

A partir do código original bastava alterar int para float e %d para %f no scanf.

Postado

Um buffer para a parte do scanf faria o código ir ao encontro do que o professor disse F5Rua4D.gif.

Por exemplo, você declararia a variável Escolha, do tipo float, e uma de nome Temporaria, do tipo char. Então armazenaria o caractere de entrada na variável Temporaria e depois passaria o conteúdo dela para a Escolha, que participaria na parte das condicionais.

Espero ter ajudado GbhmuXl.gif.

Postado
Eu acho que o cr33d que se confundiu. Porque trocar números por letras?

A partir do código original bastava alterar int para float e %d para %f no scanf.

Eu não me confundi olha o enunciado era esse: "Repare no código que a variável Escolha é inteira, faça agora o mesmo código só que com a variável em ponto flutuante, ou seja ao invés int Escolha, vai passar a ser float Escolha, e para o menu de if coloque letras."

O codigo original que ele me passou é esse:

#include <stdio.h>

int main(int argc,char **argv)

{

int escolha;

printf("Escolha--->( 1, 2, 3, 4) e digite.....:\n"); /* output */

scanf("%d",&escolha); /* input */

if(escolha)

{

if (escolha == 1)

{

printf("\nEscolheu o numero [uM] \n");

}

}

{

if(escolha == 2)

{

printf("\nEscolheu o numero [DOIS] \n");

}

}

{

if(escolha == 3)

{

printf("\nEscolheu o numero [TRES] \n");

}

}

{

if(escolha == 4)

{

printf("\nEscolheu o numero [QUATRO] \n");

}

}

return 0; /* Retorno ao S.O */

}

E aí????

Um buffer para a parte do scanf faria o código ir ao encontro do que o professor disse F5Rua4D.gif.

Por exemplo, você declararia a variável Escolha, do tipo float, e uma de nome Temporaria, do tipo char. Então armazenaria o caractere de entrada na variável Temporaria e depois passaria o conteúdo dela para a Escolha, que participaria na parte das condicionais.

Espero ter ajudado GbhmuXl.gif.

você pode me mostrar isso la no codigo...

Eu não me confundi olha o enunciado era esse: "Repare no código que a variável Escolha é inteira, faça agora o mesmo código só que com a variável em ponto flutuante, ou seja ao invés int Escolha, vai passar a ser float Escolha, e para o menu de if coloque letras."

O codigo original que ele me passou é esse:

#include <stdio.h>

int main(int argc,char **argv)

{

int escolha;

printf("Escolha--->( 1, 2, 3, 4) e digite.....:\n"); /* output */

scanf("%d",&escolha); /* input */

if(escolha)

{

if (escolha == 1)

{

printf("\nEscolheu o numero [uM] \n");

}

}

{

if(escolha == 2)

{

printf("\nEscolheu o numero [DOIS] \n");

}

}

{

if(escolha == 3)

{

printf("\nEscolheu o numero [TRES] \n");

}

}

{

if(escolha == 4)

{

printf("\nEscolheu o numero [QUATRO] \n");

}

}

return 0; /* Retorno ao S.O */

}

E aí????

Ae consegui tinha que fazer isso valeu pela ajuda.

int main(int argc,char **argv)

{

float escolha;

char temporaria;

printf("Escolha--->( a, b, c, d) e digite.....:\n"); /* output */

scanf("%c",&temporaria); /* input */

escolha = temporaria;

if(escolha)

{

if (escolha == 'a')

{

printf("\nEscolheu o numero [uM] \n");

}

}

{

if(escolha == 'b')

{

printf("\nEscolheu o numero [DOIS] \n");

}

}

{

if(escolha == 'c')

{

printf("\nEscolheu o numero [TRES] \n");

}

}

{

if(escolha == 'd')

{

printf("\nEscolheu o numero [QUATRO] \n");

}

}

return 0; /* Retorno ao S.O */

}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!