programaçao

tenho uma questao sobre outro trabalho que estou a desenvolver sobre o calculo do iva.
espero k m possam ajudar!!!!
o problema esta na funcao assinalada a vermelho!!
quando o programa pede ao utilizador introduzir o codigo do produto, o preço e a quantidade que o programa so aceitasse numeros reais e nao letras .... o que devo fazer!!
abaixo encontra-se o codigo!!!!!


_______________________________________________________________________________


// ******** Definição de cabeçalhos e bibliotecas **********************************
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <winbase.h> // Contem a função HANDLE GetStdHandle(DWORD nStdHandle);
#include <math.h>
float preco,quant,iva1=0.05, iva2=0.12, iva3=0.21;

// ******** Apresentação das funções usadas ****************************************
void define_cor(int cor_letra);
//***********Funções para o calculo do Iva********************************************

float calculo_iva(int op)
{
float preco_final=0.0, preco=0.0;
int quant=0;
printf("\n\t- Pre%co sem IVA: ", char(135));
scanf(" %f", &preco);
printf("\n\t- Quantidade: ");
scanf(" %d", &quant);

if(op>0 && op<= 3)
preco_final = quant*preco*(1+iva1);
else
if(op>3 && op<=6)
preco_final = quant*preco*(1+iva2);
else
preco_final = quant*preco*(1+iva3);
return preco_final;
}

void calculos(void)
{
float preco_iva[6], soma_iva5=0.0, soma_iva12=0.0, soma_iva21=0.0, soma=0.0, aux=0.0;
int i, produtos[9], opcao;
for(i=0;i<9;i++)
produtos=i;
for(i=1; i<6; i++)
{
opcao=0;
while ((opcao<=0) || (opcao>=10))
{
printf("\t__________________________________\n");
printf("\n\t- Digite o c%cdigo do %d%c produto:", char(162), i, char(167));
scanf(" %d", &opcao);
fflush(stdin);
if (opcao<=0 || opcao>=10)
{
printf("\n\tOp%c%co Inv%clida!!!\n", char(135), char(132), char(160));
// opcao=0;
fflush(stdin); // Limpa o buffer de entrada (teclado)
}
}

preco_iva=calculo_iva(opcao);
// calculo_iva(opcao);


if(opcao>0 && opcao<=3)
{
aux=preco_iva/(1+iva1);
soma_iva5 = soma_iva5+(preco_iva-aux);
}
else
{
if(opcao>=4 && opcao<=6)
{
aux=preco_iva/(1+iva2);
soma_iva12 = soma_iva12+(preco_iva-aux);
}
else
{
aux=preco_iva/(1+iva3);
soma_iva21 = soma_iva21+(preco_iva-aux);
}
}

soma=soma_iva5+soma_iva12+soma_iva21;
}

printf("\t__________________________________\n\t__________________________________\n");
for(i=1;i<6;i++)
printf("\n\t%d%c Produto - Pre%co Total = %.2f\n\n", i, char(167), char(135), preco_iva);
printf("\t__________________________________\n\t__________________________________\n");
printf("\n\t - IVA 5%c = %.2f\n", char(37), soma_iva5);
printf("\n\t - IVA 12%c = %.2f\n", char(37), soma_iva12);
printf("\n\t - IVA 21%c = %.2f\n", char(37), soma_iva21);
printf("\t__________________________________");
putchar('\n');
printf("\n\t - IVA Total = %.2f\n", soma);
printf("\t__________________________________\n\t__________________________________\n");
getch();
}

// ******** Função menu principal **************************************************
void menu_principal(void)
{

define_cor(1);//Fundo cinzento;Letra vermelha
system("cls");
int i;
char car;
car=char(201); printf("\t\t%c",car);//tipo de caracter do canto superior esquerdo
for (i=20;i<=65;i++)//tamanho da barra superior//
{car=char(205); printf("%c",car); }//tipo de caracter da barra superior
car=char(187); printf("%c",car);//tipo de caracter do canto superior direito
car=char(186);//tipo de caracteres das barras laterais
printf("\n\t\t%c %c",car,car);
printf("\n\t\t%c %c",car,car);
printf("\n\t\t%c C%clculo do IVA %c",car,char (160),car);
printf("\n\t\t%c %c",car,car);
printf("\n\t\t%c 1-Consultar tabela de IVA %c",car,car);
printf("\n\t\t%c %c",car,car);
printf("\n\t\t%c 2-Consultar tabela de Produtos %c",car,car);
printf("\n\t\t%c %c",car,car);
printf("\n\t\t%c 3-C%clculo do IVA %c",car,char (160),car);
printf("\n\t\t%c %c",car,car);
printf("\n\t\t%c 4-Cr%cditos %c",car,char (130),car);
printf("\n\t\t%c %c",car,car);
printf("\n\t\t%c 9- Sair %c",car,car);
printf("\n\t\t%c %c",car,car);
printf("\n\t\t%c %c",car,car);
car=char(200); printf("\n\t\t%c",car);//tipo de caracter do canto inferior esquerdo
for (i=20;i<=65;i++)//tamanho das barras inferiores
{car=char(205); printf("%c",car); }//tipo de caracter da barra inferiores
car=char(188); printf("%c",car);//tipo de caracter do canto inferior direito
fflush(stdin);//apaga o conteudo do teclado
}
// ******** Função Consultar tabela de IVA *****************************************************
void consultartabeladeiva(void)
{
define_cor(1);//Fundo cinzento;Letra vermelha
system("cls");
printf("\n\n\n\n\n\n");
printf("\n\t\7----------------------------------------------------------");
printf("\n\t* *");
printf("\n\t* Tabela de IVA *");
printf("\n\t* *");
printf("\n\t----------------------------------------------------------");
printf("\n\t* C%cdigo IVA * Tipo de Bens * Taxa de IVA *", char(162));
printf("\n\t----------------------------------------------------------");
printf("\n\t* * * *");
printf("\n\t* 1 * Bens %c taxa reduzida * %.0f%c *", char(160),(float (iva1)*100), char(37));
printf("\n\t* * * *");
printf("\n\t* 2 * Bens %c taxa interm%cdia * %.0f%c *", char(160), char(130) ,(float (iva2)*100), char(37));
printf("\n\t* * * *");
printf("\n\t* 3 * Bens %c taxa normal * %.0f%c *", char(160),(float (iva3)*100), char(37));
printf("\n\t* * * *");
printf("\n\t----------------------------------------------------------\n");



printf("\n\t Carregue numa tecla p/ ");
printf("\n\t voltar ao menu principal ");
}
// ******** Função Consultar tabela de Produtos *************************************************
void consultartabeladeprodutos(void)
{

define_cor(1);//Fundo cinzento;Letra vermelha
system("cls");
printf("\n\n\n\n\n\n\n\n");
printf("\n\t\7---------------------------------------------------");
printf("\n\t* *");
printf("\n\t* Tabela de produtos *");
printf("\n\t* *");
printf("\n\t---------------------------------------------------");
printf("\n\t* Produto * C%cdigo Produto * Taxa IVA *", char(162));
printf("\n\t---------------------------------------------------");
printf("\n\t* * * *");
printf("\n\t* Agua * 1 * %.0f%c *", (float (iva1)*100), char(37));
printf("\n\t* * * *");
printf("\n\t* P%co * 2 * %.0f%c *",132,(float (iva1)*100), char(37));
printf("\n\t* * * *");
printf("\n\t* Carne * 3 * %.0f%c *", (float (iva1)*100), char(37));
printf("\n\t* * * *");
printf("\n\t---------------------------------------------------");
printf("\n\t* * * *");
printf("\n\t* Margarina * 4 * %.0f%c *", (float (iva2)*100), char(37));
printf("\n\t* * * *");
printf("\n\t* Caf%c * 5 * %.0f%c *",130,(float (iva2)*100), char(37));
printf("\n\t* * * *");
printf("\n\t* Compota * 6 * %.0f%c *", (float (iva2)*100), char(37));
printf("\n\t* * * *");
printf("\n\t---------------------------------------------------");
printf("\n\t* * * *");
printf("\n\t* Sumos * 7 * %.0f%c *", (float (iva3)*100), char(37));
printf("\n\t* * * *");
printf("\n\t* Rebu%cados * 8 * %.0f%c *",135,(float (iva3)*100), char(37));
printf("\n\t* * * *");
printf("\n\t* Detergente* 9 * %.0f%c *", (float (iva3)*100), char(37));
printf("\n\t* * * *");
printf("\n\t---------------------------------------------------\n");


printf("\n\t Carregue numa tecla p/ ");
printf("\n\t voltar ao menu principal ");

}

// ******** Função Calculo do IVA **********************************************************
void calculodoiva(void)
{

define_cor(1);//Fundo cinzento;Letra vermelha
system("cls");
printf("\n\n\n\n");
printf("\n\t\7---------------------------------------------------");
printf("\n\t* *");
printf("\n\t* C%clculo do IVA *", char(160));
printf("\n\t* *");
printf("\n\t---------------------------------------------------\n");

calculos();


}
// ******** Função creditos *************************************************
void creditos(void)
{

define_cor(1);//Fundo cinzento;Letra vermelha
system("cls");
printf("\n\n\n\n\n\n");
printf("\n\t\7---------------------------------------------------");
printf("\n\t* *");
printf("\n\t* Cr%cditos *",char (130));
printf("\n\t* *");
printf("\n\t----------------------------------------------------");
printf("\n\t* *");
printf("\n\t* Tiago Lopes n%c6709 *", char(167));
printf("\n\t* *");
printf("\n\t* Ariana Rodrigues n%c7558 *", char(167));
printf("\n\t* *");
printf("\n\t---------------------------------------------------\n");

printf("\n\t Carregue numa tecla p/ ");
printf("\n\t voltar ao menu principal");
}
//********************************SUBALGORITMO CORES**************************************/
void define_cor(int cor_letra)
{
HANDLE handle;
handle = GetStdHandle ( STD_OUTPUT_HANDLE );
switch(cor_letra){
case 1: //Fundo cinzento;Letra vermelha
SetConsoleTextAttribute ( handle, FOREGROUND_RED | FOREGROUND_RED| BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN );
break;
}
}
// ******** Função principal *******************************************************
void main(void)
{
int opcao;
do {
menu_principal();
printf("");
printf("\n\tDigite a sua op%c%co: ",char (135), char(132));
scanf("%d",&opcao);
switch (opcao) {
case 1:
consultartabeladeiva();
break;
case 2:
consultartabeladeprodutos();
break;
case 3:
calculodoiva();
break;
case 4:
creditos();
break;
case 9:
printf("\n\tA sua op%c%co foi: Sair",char (135), char (132));
break;
default:
printf("\n\tEscolha uma op%c%co correcta", char(135), char(132));
} while (!kbhit()); /* Enquanto não clicar numa tecla , espera ... */
system("cls");
} while (opcao!=9);

}
 
Assim de repente não me estou a lembrar de nada mais imediato, mas basta definires um array com os valores de 0 a 9 e verificares se a string recebi está dentro desse universo.
(A supor k recebes como string)
 
Experimenta este progzito de meia tijela:

#include <stdio.h>
#include <stdlib.h>
int main()
{
while(1)
{
float input;
input = -888888888;
while(input==-888888888)
{
printf("Bota aí um num \n");
scanf("%f", &input);
fflush(stdin);
if(input == -888888888)
{
printf("YO!, numeros carago!!! \n\n");
}
}
printf("Num=%f \n\n",input);
}
return 0;
}


Não podes meter -888888888 no input senão dá bug...


Cumprimentos
 
aconselho-t a guardares o input do teclado numa string... a partir daí consegues tirar o valor ascii de cada caracter.. se estiver entre o 48 e o 57... é inteiro e usas o atoi() para converter para inteiro... ou fazes uma funçao k o faça.. se nao tiver entre o 48 e 57, repetes o pedido d um inteiro..


problem solved.
 
Back
Topo