2013-02-24 3 views
3

Я довольно новичок в C++, и мне нужно создать C++-программу, которая сортирует 3 числа (наименьшее количество), используя pass by reference. Все работает отлично до тех пор, пока в моей функции не появится инструкция if. Я пытался сделать много отладки и кажется, что всякий раз, когда я использую «<», инструкция не выполняется. Если я делаю (n1 > n2), выполнение выполняется независимо от того, что. Если кто-то может помочь, это будет здорово. Вот мой код:C++ if/else if инструкция не работает

#include <cstdlib> 
#include <iostream> 
#include <stdio.h> 

using namespace std; 

int sortNum(double &n1, double &n2, double &n3); 

int main(int argc, char *argv[]) { 
    double num1, num2, num3; 

    printf("Welcome to Taylor's Sorting Program \n"); 
    printf("Enter 3 numbers and the program will sort them \n"); 
    printf("Number 1: \n"); 
    scanf("%d", &num1); 
    printf("Number 2: \n"); 
    scanf("%d", &num2); 
    printf("Number 3: \n"); 
    scanf("%d", &num3); 

    sortNum(num1, num2, num3); 

    printf("Sorted Values \n"); 
    printf("Number 1: %d ", num1); 
    printf("\t Number 2: %d ", num2); 
    printf("\t Number 3: %d \n", num3); 

    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

int sortNum(double &num1, double &num2, double &num3) { 
    double n1, n2, n3; 
    n1 = num1; 
    n2 = num2; 
    n3 = num3; 


    if (n1 < n2 && n1 > n3) { 
     num1 = n2; 
     num2 = n1; 
     num3 = n3; 
    } else if (n2 < n1 && n2 > n3) { 
     num1 = n3; 
     num2 = n2; 
     num3 = n1; 
    } else if (n3 < n2 && n3 > n1) { 
     num1 = n2; 
     num2 = n3; 
     num3 = n1; 
    } 
    return 0; 
} 
+0

Вам необходимо посмотреть руководство по 'scanf' -' scanf ("% ld", & numX) '. –

+1

Есть 6 способов переупорядочить 3 числа, и ваша функция имеет только 3 возможных результата. – interjay

+0

scanf и printf не являются C++. Они наследуются C-isms, которые не являются типичными. Я предлагаю вам не использовать их. –

ответ

5

Вы используете неправильный спецификатор формата для scanf(). Вместо %d (обозначая указатель на целое число), используйте %lf (Указатель на double). Поменяйте double на int в своем коде.

Обратите внимание, что ваши printf() заявлений страдают от подобной проблемы, и следует использовать либо %f, %g или %e.

1

Существует 6 возможных заказов (перестановок) трех разных чисел.

Ваш код появляется, чтобы проверить только 3 из них, а именно, в порядке,

    n3 < n1 < n2

и

    n3 < n2 < n1

и

    n1 < < n3 n2

В 3 других случаях вы просто return 0 и это все.

Из нашего систематического перечня выше, можете ли вы догадаться, что имеют три других случая, как они похожи?


Кстати, не просили, но вы избавите себя от тонны проблем с помощью C++ cin и cout вместо функций С низкого уровня scanf и printf.

+0

Благодарим за помощь. – user2104913

Смежные вопросы