• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

hoakerk.

Dúvida no código.

4 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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());

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela dica. Já consegui solucionar o problema :P

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora