С ++ продолжает расти - PullRequest
       18

С ++ продолжает расти

0 голосов
/ 29 сентября 2018

Здравствуйте, это моя первая программа с циклом do-while, и мне потребовалось немного времени, чтобы ее отключить.Мне нужно, чтобы пользователь ввел 2 числа и поднял первое число до второго.Я наконец получил код, чтобы спросить, «хотели бы они поднять еще одно число на степень?»и когда они говорят «да» и вводят 2 новых числа, к сумме прибавляется сумма из первых 2 чисел, введенных со вторым набором чисел, и так далее.Может кто-нибудь помочь мне с этой проблемой?Вот код и картинка, которая поможет вам!

#include <iostream>
using namespace std;

int main()
{

    int num;
    int pow;
    int p;
    int power = 1;
    char yesno = 'y' || 'Y';

    do
    {
        cout << "Enter a number: ";
        cin >> num; "\n";
        cout << "Enter the power to raise: ";
        cin >> pow; "\n";

        for (p = 1; p <= pow; p++)
        {
            power = power * num;
        }

        cout << "The total is: " << power << endl;
        cout << "\n\n";

        cout << "Would you like to raise another number by a power? [Y/N]";
        cin >> yesno;
    } while (yesno != true);
}

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Когда вы достигнете строки } while (yesno != true); и вернетесь к do {, переменная power по-прежнему будет содержать предыдущую num^pow.Вам нужно будет присвоить power = 1 после do {.

0 голосов
/ 29 сентября 2018
#include <iostream>
// you also need
#include <cmath>  // for pow()

using namespace std;

int main()
{
    // int num;  Declare variables where they're used. As locally as possible.
    // int pow;
    // int p;
    // int power = 1;
    // char yesno = 'y' || 'Y';  I don't know what you were trying to do here
                              // the expression 'y' || 'Y' will always be true
                              // and evaluate to some value different from null
                              // wich will be assigne to yesno. But with no con-
    char yesno;               // sequences since it later gets overwritten by
    do                        // cin >> yesno; There is no need to initialize
    {                         // this variable.
        cout << "Enter a number: ";
        int num;
        cin >> num; "\n";  // the statement "\n"; has no effect.

        cout << "Enter the power to raise: ";
        int pow;
        cin >> pow; "\n";  // again. no effect.

        // for (p = 1; p <= pow; p++)  as user4581301 has pointed out in the
                                    // comments it is more ... natural in C
                                    // to loop from 0 to < max:
        int power = 1;  // now its time to declare and define power ;)
        for(int p = 0; p < pow; ++p)  // notice that you can declare variables
        {                             // in the init-statement of a for-loop
            // power = power * num; shorter:
            power *= num;
        }

        cout << "The total is: " << power << /* endl; + 2 x '\n' gives: */ << "\n\n\n";
        // cout << "\n\n";

        cout << "Would you like to raise another number by a power? [Y/N]";
        cin >> yesno;
    // } while (yesno != true);  that condition will most likely always be true
                              // since the user would have a hard time to input
                              // a '\0' character, which would evaluate to false
                              // better:
       } while(yesno == 'y' || yesno == 'Y' );
}

сделано.

без беспорядка:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    char yesno;
    do {
        cout << "Enter a number: ";
        int num;
        cin >> num;

        cout << "Enter the power to raise: ";
        int pow;
        cin >> pow;

        int power = 1;
        for(int p = 0; p < pow; ++p)
            power *= num;

        cout << "The total is: " << power << "\n\n\n";
        cout << "Would you like to raise another number by a power? [Y/N]";
        cin >> yesno;
    } while(yesno == 'y' || yesno == 'Y' );
}
0 голосов
/ 29 сентября 2018

Проблема постоянно увеличивающегося ответа состоит в том, что power не сбрасывается в цикле do-while, поэтому последнее значение переносится в следующий цикл.Вам нужно сбросить его в верхней части цикла.

Другая проблема с кодом заключается в том, что условие выхода никогда не возникнет.

Попробуйте вместо этого:

int main()
{

    int num;
    int pow;
    int p;
    int power;
    char yesno;

    do
    {
        power = 1;   // <<<<<< reset power here

        cout << "Enter a number: ";
        cin >> num; "\n";
        cout << "Enter the power to raise: ";
        cin >> pow; "\n";

        for (p = 1; p <= pow; p++)
        {
            power = power * num;
        }

        cout << "The total is: " << power << endl;
        cout << "\n\n";

        cout << "Would you like to raise another number by a power? [Y/N]";
        cin >> yesno;
    } while (yesno == 'y' || yesno == 'Y');  // <<<<< test for 'yes' response
}
...