hoakerk. Posted October 10, 2009 at 11:00 PM Report Share #291109 Posted October 10, 2009 at 11:00 PM Olá a todos, Sou iniciante em programação... E quero aprender mais. Tenho por objectivo de criar um programa simples. Mas deparei-me com uns pequenos obstáculos... Vou colocar o código e a seguir as minhas duas dúvidas. #include <iostream> using namespace std; int main () { char op; float n; cout << "Conversao automatica de notas Quantitativas para Qualitativas.\n"; cout << "O valor da nota deve ser representado entre 0 e 20.\n\n"; cout << "Introduza a nota: "; cin >> n; if(n>=0 && n<5) cout << "Nota Qualitativa: Mau\n\n"; else if(n>=5 && n<10) cout << "Nota Qualitativa: Mediocre\n\n"; else if(n>=10 && n<14) cout << "Nota Qualitativa: Suficiente\n\n"; else if(n>=14 && n<18) cout << "Nota Qualitativa: Bom\n\n"; else if(n>=18 && n<=20) cout << "Nota Qualitativa: Muito Bom\n\n"; else if(n>20 || n<0) cout << "ERRO! Introduza o valor da nota entre 0 e 20!\n\n"; cout << "\n\n"; do{ cout <<"Deseja repetir? [s/N]: "; cin >> op; op=toupper(op); switch (op){ case 'S': case 's': system ("cls"); main (); case 'N': case 'n': return EXIT_SUCCESS; default: cout <<"Opcao invalida!\n\n"; break; } } while (op!='n' || op!='N' || op!='s' || op!= 'S'); } Na primeira parte, nas condicionais, se introduzir uma letra em vez de um float, programa entra em ciclo. Existe alguma maneira simples de limitar a introdução somente para números (float)? A minha segunda dúvida é em relação do "do...while". Se eu introduzir 1 carácter qualquer, funciona como deve ser. Mas se introduzir 2 acontece o seguinte: "(...) Deseja repetir? [s/N]: kj Opcao invalida! Deseja repetir? [s/N]: Opcao invalida! (...)" Fico muito agradecido pela vossa ajuda. Cumprimentos. Link to comment Share on other sites More sharing options...
hristosax Posted October 11, 2009 at 09:09 AM Report Share #291128 Posted October 11, 2009 at 09:09 AM hmmm em relação à primeira pergunta, podes fazer um for(n) acho que assim o programa verifica se é mesmo float... depois dizes ao programa para voltar ao cin >> n; se não for float e continuar se for. agora não tenho tempo para explicar, mais tarde hoje se ninguém e tiver respondido eu digo-te mais., Link to comment Share on other sites More sharing options...
forcewill Posted October 11, 2009 at 09:11 PM Report Share #291269 Posted October 11, 2009 at 09:11 PM Quanto á tua primeira pergunta ao introduzires uma letra em vez de um valor numérico podes/deves sempre testar o estado da tua stream int n; cin.clear(); do { cin.clear(); cin >> n; if(cin.fail()) cout << "Valor incorrecto introduza de novo.\n"; }while(cin.fail()); Link to comment Share on other sites More sharing options...
hoakerk. Posted November 6, 2009 at 02:03 PM Author Report Share #294969 Posted November 6, 2009 at 02:03 PM Obrigado pela dica. Já consegui solucionar o problema 😛 Cumprimentos. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now