Замена целых чисел с помощью указателя - PullRequest
0 голосов
/ 25 сентября 2019

1: http://itweb.fvtc.edu/ag/?u=3&f=cpp-assignment3

Я должен поменять целое число с помощью функции SwapInteger вне основного типа функции с помощью указателя.Пользователь вводит число, а затем компьютер компилирует и изменяет результат на заданный результат, назначенный нашим профессором.

Я попытался создать функцию void swapInteger и ввести некоторый код, чтобы увидеть, будет ли этот обменкод, но это ничего не делает.Поэтому я просто добавил немного кода в основную функцию, но не думаю, что этого хотел от нас наш профессор.Он заявил: «Не изменяйте основную функцию»

#include <iostream>
#include <conio.h>
#include <string>

using namespace std;

// TODO: Implement the "SwapIntegers" function

void swapIntegers(int *first, int *second)
{
    int *pSwapIntegers = first;
    first = second;
    second = pSwapIntegers;
}


// Do not modify the main function!
int main()
{
    int first = 0;
    int second = 0;
    int *pFirst = new int (first);
    int *pSecond = new int (second);


    cout << "Enter the first integer: ";
    cin >> first;

    cout << "Enter the second integer: ";
    cin >> second;

    cout << "\nYou entered:\n";
    cout << "first: " << first << "\n";
    cout << "second: " << second << "\n";


    swapIntegers(&first, &second);

    cout << "\nAfter swapping:\n";
    cout << "first: " << *pFirst << "\n";
    cout << "second: " << *pSecond << "\n";

    cout << "\nPress any key to quit.";

    _getch();
    return 0;
}

Я ожидал, что компьютер скомпилирует два целых числа, введенных пользователем, и затем покажет пользователю замененное целое число.Пожалуйста, посмотрите на мой код, если у вас есть вопросы

1 Ответ

1 голос
/ 25 сентября 2019

Внутри вашего swapIntegers() вы меняете сами указатели, а не значения переменных, на которые они указывают.Переменные вызывающей стороны не обновляются.

swapIntegers() должно выглядеть так:

void swapIntegers(int *first, int *second)
{
    int saved = *first;
    *first = *second;
    *second = saved;
}

Кроме того, ваш main() равен глючит .Он динамически распределяет 2 int переменных, которые он пропускает, и никогда не назначает входные значения пользователя.Окончательный вывод "After swapping" выводит значения из этих указателей, а не из переменных, которые фактически были заменены.Код НЕ будет отображать ожидаемый результат.Таким образом, несмотря на то, что сказано в инструкции, main() НУЖНО изменить, чтобы работать должным образом, и если у вашего профессора есть проблемы с этим, жестко.Он допустил ошибку в коде, который дал вам.

main() должен выглядеть примерно так:

int main()
{
    int first = 0;
    int second = 0;

    cout << "Enter the first integer: ";
    cin >> first;

    cout << "Enter the second integer: ";
    cin >> second;

    cout << "\nYou entered:\n";
    cout << "first: " << first << "\n";
    cout << "second: " << second << "\n";

    swapIntegers(&first, &second);

    cout << "\nAfter swapping:\n";
    cout << "first: " << first << "\n";
    cout << "second: " << second << "\n";

    cout << "\nPress any key to quit.";

    _getch();
    return 0;
}

Или вот так:

// Do not modify the main function!
int main()
{
    int first = 0;
    int second = 0;
    int *pFirst = &first;
    int *pSecond = &second;

    cout << "Enter the first integer: ";
    cin >> first;

    cout << "Enter the second integer: ";
    cin >> second;

    cout << "\nYou entered:\n";
    cout << "first: " << first << "\n";
    cout << "second: " << second << "\n";

    swapIntegers(&first, &second);

    cout << "\nAfter swapping:\n";
    cout << "first: " << *pFirst << "\n";
    cout << "second: " << *pSecond << "\n";

    cout << "\nPress any key to quit.";

    _getch();
    return 0;
}

Иливот так:

int main()
{
    int *pFirst = new int (0);
    int *pSecond = new int (0);

    cout << "Enter the first integer: ";
    cin >> *pFirst;

    cout << "Enter the second integer: ";
    cin >> *pSecond;

    cout << "\nYou entered:\n";
    cout << "first: " << *pFirst << "\n";
    cout << "second: " << *pSecond << "\n";

    swapIntegers(pFirst, pSecond);

    cout << "\nAfter swapping:\n";
    cout << "first: " << *pFirst << "\n";
    cout << "second: " << *pSecond << "\n";

    delete pFirst;
    delete pSecond;

    cout << "\nPress any key to quit.";

    _getch();
    return 0;
}

ОБНОВЛЕНИЕ : о, подождите, это не ошибка вашего профессора, это ваша ошибка.main(), который вы представили здесь, НЕ соответствует main(), указанному в фактическом назначении! .Вот как выглядит оригинал main():

// Do not modify the main function!
int main()
{
    int first = 0;
    int second = 0;

    cout << "Enter the first integer: ";
    cin >> first;

    cout << "Enter the second integer: ";
    cin >> second;

    cout << "\nYou entered:\n";
    cout << "first: " << first << "\n";
    cout << "second: " << second << "\n";

    SwapIntegers(&first, &second);

    cout << "\nAfter swapping:\n";
    cout << "first: " << first << "\n";
    cout << "second: " << second << "\n";

    cout << "\nPress any key to quit.";

    _getch();
    return 0;
}

Этот код правильный.Таким образом, именно вы ввели неправильное использование указателей в main().Так что просто вернитесь к исходному main() коду, который вам дали.А затем выполните swapIntegers() правильно.Как сказано в инструкциях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...