Una simple suma,resta,multiplicación y división de programa

Un simple C++ programa de calculadora para calcular la suma, la resta, la multiplicación y la suma…

#include <iostream>
#include <string>
using namespace std;

int main()
{
    //input declarations as doubles for total and counter
    double total = 0, counter =0;
    //input declarations sign and Q as character
    char sign, Q = 0;
    //input declaration value as double
    double value;



        //A do..while will loop forever (or until we hit the break statement)
        do 
        {
            //The current value is 0.
            cout << "Result :"<<" "<< total << '\n';

            //Please enter an operation
            cout << "Please enter an operation and number : ";
        cin >> sign;

        //If the operation is Q, the program will end.
        if (sign != 'Q')

        cin >> value;
            cin.ignore();


            //If the value input is <=0, you can't divide anything by zero. 
            if (value <= 0)
            {
                cout << "Unknown Operator " << sign <<'\n' ;
            }

            //Otherwise procede with the calulator program
            else
            {
                //If the operation is equal to '+', then the total is added.
                if (sign == '+')
                { 
                    total += value;
                }

                //If the operation is equal to '-', then the value is subtracted from the previous number input. 
                else
                {
                    if (sign == '-')
                    {
                        total -= value;
                    }

                    //If the operation is equal to '*', then the value is multiplied to the previous number input. 
                    else
                    {
                        if (sign == '*')
                        {
                            total *= value;
                        }

                        //If the operation is equal to '/', then the value is divided by the previous number input.
                        else 
                        {
                            if ((sign == '/')&&(value != 0))
                            {
                                total /= value;
                            }
                        }
                    }
                }
            }
        }



            //While the operation is not equal to 'Q', the program will run.
            while (sign != 'Q');



        return 0;
}

La codificación para el programa anterior no tiene ningún error, pero si me presiona «Q» para salir,se muestra el último resultado non-stop. .Una y otra y otra y otra vez. . . De todos modos,alguien sabe cómo añadir raíz cuadrada para el programa. .

  • «La codificación para el programa anterior no tiene ningún error»
  • ¿Pulse «q» o «Q». El código sólo se comprueba «Q» <Capitol>
  • me presione «Q» y el programa no dejar de fumar. .
InformationsquelleAutor Matrix | 2011-04-13

4 Kommentare

  1. 0

    Como un simple ejercicio me ha refactorizado el programa para hacerlo más sencillo. No os prometo que funciona, pero debería darle un buen cimiento:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
      //input declarations as doubles for total and counter
      double total = 0, counter =0;
      //input declarations sign and Q as character
      char sign = 0;
      //input declaration value as double
      double value;
    
      //A do..while will loop forever (or until we hit the break statement)
      do 
      {
        //The current value is 0.
        cout << "Current result: " << total << '\n';
    
        //Please enter an operation
        cout << "Please enter an operation (or Q to quit) and number: ";
        cin >> sign;
    
        //If the operation is Q, the program will end.
        if (sign == 'Q' || sign == 'q') {
          cout << "See you!\n";
          break;
        }
    
        //If the input cannot be transformed into a double
        //abort loop and try again
        if (!(cin >> value)) {
          cerr << "Invalid value entered, try again\n";
          continue;
        }
    
        switch(sign)
        {
        case '+': total += value; break;
        case '-': total -= value; break;
        case '*': total *= value; break;
        case '/':
          if (value == 0) {
            cerr << "Divide by 0 prevented!\n";
          } else {
            total /= value; break;
          }
        default:
          cerr << "Unknown sign: " << sign << "\n";
        }
    
      } while (true);
    
      return 0;
    }

    Los puntos principales:

    • evitar la sangría cuando sea posible, que dificultan la legibilidad (prefieren continuar/pausa)
    • el uso de un interruptor cuando sea posible (es posible que char y números)
    • de comprobación de errores cuando sea necesario: la conversión de la entrada del usuario en el double podría fallar, 0 podría ser introducido
    • la owh,muchas gracias. . su programa es un sencillo programa. . realmente aprecio esto!!!
  2. 1

    Reemplazar if (sign != 'Q') ... por if (sign == 'Q') break;

    • Este va a corregir numerosos errores posibles.
    • Esto hará que el código sea más legible mediante el uso de menos de sangría y los apoyos.

    EDIT: como alguien menciona, probablemente debería ser la comprobación de minúsculas también. (si (signo == ‘Q’ || sign == ‘q’)).

  3. 0

    Para la raíz cuadrada,
    #include <math>
    double r=sqrt(e);

    Respecto a su otro tema : por favor aplicar sangría al código mejor 😉

    Está usted seguro de que no te olvides de poner un bloque después de esta línea ?
    if (sign != 'Q')

    Forma más sencilla, el uso de un depurador en modo de paso y vas a entender!

    • gracias por la raíz cuadrada de código. . ¿qué entiende usted por poner un bloque después de la línea?? lo siento,yo sólo soy un principiante así que no estoy familiarizado con todo el c++ plazo..
    • después de la prueba, poner una explícita bloque {}, es una ayuda. como el código es, curiosamente, sangría, va a mejorar su legibilidad.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea