2016-08-29 7 views
0

Я пытаюсь создать кусок кода, который работает так. Пользователь вводит 3-значное число, предположим, что они выбрали 653, они также вводят номера в том целом, которые они хотят обменивать. Например:Функция Value Value Value

Enter a number and values you wish to swap: "653 2 3" 

Это возвращает следующее значение:

635 is the new number. 

Я пытаюсь сделать это в функции я назвал digit_swap. Я не совсем уверен, как я подхожу к этому, поскольку я очень новичок в кодировании и даже новичок в кодировании. Я думаю, что я должен отделить целое число в единицы, десятки и сотни компонентов и делать, что я сделал следующее:

third = (number % 10); 
second = ((number % 100)/10); 
first = ((number % 1000)/100); 

Единственное, что я использую кучу если заявления для определения Перекачка числа или это будет цикл. Я действительно не знаю, как это сделать. Что касается моего кода, то у меня есть следующее.

#include <iostream> 

using std::cin; 
using std::cout; 
using std::endl; 

int digit_swap(int number, int InputOne, int InputTwo) { 

int first, second, third; 

    if (number < 100) { 
     cout << "Please enter a 3 digit integer\n"; 
     exit(0); 
    } 
    else if (number >= 1000) { 
     cout << "Please enter a 3 digit integer\n"; 
     exit(0); 
    } 
    else { 

     third = (number % 10); 
     second = ((number % 100)/10); 
     first = ((number % 1000)/100); 

    } 
} 

using namespace std; 
int main() { 
    int option_one, option_two; 
    int number; 
    cin >> number; 
    cin >> option_one >> option_two; 
    digit_swap(number, option_one, option_two); 
    cout << "New number = " << number; 

} 

Даже когда я тест, чтобы увидеть, если он работает, добавив return first в еще сегменте, если заявление не возвращает ничего. Любая помощь приветствуется, я также не прошу вас сделать код для меня.

+4

Что значит «ничего не возвращает»? Он возвращает 'int', поэтому он всегда возвращает что-то. Вы забыли сохранить результат 'digit_swap'? Прямо сейчас значения 'first',' second' и 'third' теряются, как только' digit_swap' возвращается, и поскольку у вас нет оператора 'return', возвращаемое значение' digit_swap' не определено (конкретный но не может быть определен только из кода). – szym

+0

И не вызывайте 'exit' только из-за недопустимого ввода. Верните что-то по всем путям, отредактируйте, нужно ли его печатать в 'main'. – LogicStuff

ответ

0

Я не тестировал ваш код, но я думаю, что есть проблема с тем, как вы хотите обработать.

вы хотите изменить «номер», передав его в функцию

int digit_swap(int number, int InputOne, int InputTwo) { 

int first, second, third; 

if (number < 100) { 
    cout << "Please enter a 3 digit integer\n"; 
    exit(0); 
} 
else if (number >= 1000) { 
    cout << "Please enter a 3 digit integer\n"; 
    exit(0); 
} 
else { 

    third = (number % 10); 
    second = ((number % 100)/10); 
    first = ((number % 1000)/100); 

} 

}

, если вы хотите изменить переменную внутри функции и изменения могут быть увидеть снаружи вы должны используйте указатель. Если вы новичок в программировании, я предлагаю вам сделать что-то подобное в вашем основном коде. Функция way работает, она создаст копию всего вашего параметра, изменение, которое вы сделали на них, не находится на оригинале.

int main() { 
    int option_one, option_two; 
    int number; 
    cin >> number; 
    cin >> option_one >> option_two; 
    int result = digit_swap(number, option_one, option_two); 
    cout << "New number = " << result; 

} 

хранить в новом результате переменного «возвращением вашей функции»

1
int digit_swap(int number, int InputOne, int InputTwo) { 

    int first, second, third; 

    if (number < 100) { 
     // DO Something as you are doing 
    } 
    else { 
     third = (number % 10); 
     number /= 10; 
     second = (number % 10); 
     number /= 10; 
     first = (number % 10); 
     number /= 10; 
    } 
    if(InputOne == 1) { 
     if(InputTwo == 2) { 
      number += second*100 + first*10 + third; 
     } 
     else if(InputTwo == 3) { 
      number += third*100 + second*10 + first; 
     } 
     else{;} 
    } 
    else if(InputOne == 2) { 
     if(InputTwo == 3) { 
      number += first*100 + third*10 + second; 
     } 
    } 
    else{;} 
    return number; 
} 
+0

быстрый вопрос о вашем коде, я поражен этим, но мне нужно добавить еще какие-то другие утверждения, потому что, когда я пытаюсь поменять вторую цифру первым, я получаю 0? – bose

+0

@bose: Мой код будет работать для значений возрастающего значения 'InputOne' и' InputTwo'. – Shravan40

0

Сначала вам необходимо либо передать номер по ссылке в противном случае число в digit_swap просто копия числа в основном (). Другой вариант, это просто вызвать функцию так:

number = digit_swap(number, option_one, option_two); 

или по ссылке

void digit_swap(int & number, int InputOne, int InputTwo); 

Чтобы помочь вам с swaping я хотел бы предложить целочисленный массив.

int arr[3]; 
arr[0] = number/100; 
arr[1] = number/10; 
arr[2] = number % 10; 
int temp = arr[InputOne-1]; 
arr[InputOne-1] = arr[InputTwo-1]; 
arr[InputTwo-1] = temp; 

Я надеюсь, что это поможет.