1

C ++にxcodeを使用しています。これは、単純なコマンド ライン計算機です。これは私がこれまでに持っているものです:

//
//  main.cpp
//  test
//
//  Created by Henry Bernard Margulies on 8/21/13.
//  Copyright (c) 2013 Henry Bernard Margulies. All rights reserved.
//
#include <iostream>
#include <string>

using namespace std;

int main()
{
    bool loopy = true;  
    cout << "\nCalculator\n";       
    while (loopy == true)
    {
            bool gooy;          
            double answ;            // answer
            double fn;             // first number
            double sn;             // second number
            string opersym;     // operation symbol
            string oper;        // operation
            string more;        // rerun the program or not
            cout << endl << "Operation please (+, - , x or d): ";  //Problem1
            cin >> oper;                                        
            if (oper == "+")                    //makes sure operation is viable
            {
                gooy = true;
            }
            if (oper == "-")
            {
                gooy = true;
            }
            if (oper == "x")
            {
                gooy = true;
            }
            if (oper == "d")
            {
                gooy = true;
            }                                   //does the above
            else                
            {
                cout << endl << "Enter a real operation";       //complains if oper not viable
                gooy = false;
                continue;
            }
            if (gooy == true)                      
                cout << endl << "First number please: ";        
                if(!(cin >> fn))                                //makes sure it is a number
                {
                    cerr  << endl << "Enter a number next time, please try again"; //complaint
                    gooy = false;
                    loopy = true;
                    break;                            //Problem2
                }
                if (gooy == true)     
                {
                    cout << endl << "Next number: ";                                    
                    if(!(cin >> sn))                        
                    {
                        cerr  << endl << "Enter a number next time, please try again";
                        gooy = false;
                        loopy = true;
                        break;                  //Problem2                       
                    }
                    if (gooy == true)
                    {
                        opersym = oper;
                        if (oper == "+")
                            answ = fn + sn;
                        if (oper == "-")
                            answ = fn - sn;
                        if (oper == "x")
                            answ = fn * sn;
                        if (oper == "d")
                        {
                            opersym = "÷";
                            answ = fn / sn;
                        }
                        cout << endl << "You entered: " << fn << " " << opersym << " " << sn << ". And it equals " << answ;
                        cout << endl << "Want more? y/n: ";
                        cin >> more;
                        if (more == "n")
                        {
                            cout << endl << "Okay, I'm not wanted. Shutting down. :(";
                            return(0);
                        }
                        if (more == "y")
                        {   
                            cout << endl << "Back to work!";
                        }
                        else
                        {
                            cout << endl << "Since you can not be bothered to type it right, I'll take it as a no. :(";
                            return(0);
                        }
                    }
                }

    }
    return 0;
}

いくつかのリクエストがあります:

  1. まず、除算だけが機能しているようです。操作を要求する main の最初の部分を確認して確認します。+、-、または x に対しては機能したくありませんが、d に対してのみ機能します

2.problem2 という名前の 2 つのコメントを確認します。これらの部分で続きます。そして壊れます。電卓を適切に再起動しないでください。while ループの先頭に戻りたいのですが、goto が不安定で悪いと思われます。

3.私のコードを修正してもらえますか? 私は専門家ではなく、全体が非常に汚いです。コードをより短く、より速く、より安定させるためのより良いロジックを教えてください。

ありがとう!ps。私はインターネットから離れて C++ を独学している 12 歳の子供です。

4

2 に答える 2

1

あなたの問題はelse afterですif (oper == "d")操作がdでない場合、操作が以前に選択された場合でも、else句がアクティブになります。代わりにこれを試してください。

if (oper == "+")
{
    gooy = true;
}
else if (oper == "-")
{
    gooy = true;
}
else if (oper == "x")
{
    gooy = true;
}
else if (oper == "d")
{
    gooy = true;
}
else                
{
    cout << endl << "Enter a real operation";       //complains if oper not viable
    gooy = false;
    continue;
}

以前のすべてのelse句がアクティブ化された場合にのみ、最後のelseがアクティブ化されます。

あるいは

if (oper == "+" || oper == "-" || oper == "x" || oper == "d")
{
    gooy = true;
}
else                
{
    cout << endl << "Enter a real operation";       //complains if oper not viable
    gooy = false;
    continue;
}

breakそれが入っているループを終了します。continue代わりに試してください。ループの先頭に戻り、条件が真の場合は最初からやり直します。

変数を使用する場所の近くで変数を宣言するようにしてください。たとえば、 answ と opersym は、ループの後半まで使用されません。if ステートメント ブロックに対してローカルに宣言できます。if (gooy == true)

于 2013-08-22T03:46:23.827 に答える
0

まず第一に、C++ の学習を頑張ってください。私はあなたがそれをすぐに手に入れると確信しています:) これは基本的な電卓です。理想的ではありませんが、より短いです。

#include <iostream>
#include <string>

int main()
{
    using namespace std; //use namespace only within the scope of main()

    //ask user to choose operation
    string operation = "";//good to initialize local variable. otherwise C++ assigns them garbage values
    while(operation != "+" && operation != "-" && operation != "*" && operation != "/")
    {
        cout << "Please enter a mathematical operation. Options are: + or - or * or /" << endl;
        cin >> operation;
    }
    cout << "You entered " <<  operation << endl << endl;

    //ask user to enter two numbers
    double number1 = 0, number2 = 0, result = 0;
    bool success = false;//true if calculation carried out successfully

    //keep looping till calculation carried out successfully
    while(success!=true)
    {
        cout << "Please enter the first number: " << endl;
        cin >> number1;
        cout << "Please enter the second number: " << endl;
        cin >> number2;

        if(operation == "+") result = number1 + number2;
        else if(operation == "-") result = number1 - number2;
        else if(operation == "*") result = number1*number2;
        else if(operation == "/" && number2 != 0) result = number1/number2;
        else 
        {
            cout << "Please enter non-zero value for number2 since carrying out division" << endl;
            continue;
        }
        success = true;
        cout << "Result is: " << number1 << " " << operation << " " << number2 << " = " << result << endl;
    }
    return(0);
}
于 2013-08-22T04:01:11.120 に答える