C++ if/else if语句不起作用

C++ if/else if语句不起作用

问题描述:

我对C++相当陌生,而且必须使用传递引用来制作一个C++程序,它可以对3个数字(最小最大)进行排序。一切工作正常,直到我的函数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)”的手册。 – 2013-02-24 17:06:57

+1

有6种方法可以重新排列3个数字,而您的功能只有3种可能的结果。 – interjay 2013-02-24 17:08:17

+0

scanf和printf不是C++。它们是继承的C-isms,它们不是类型安全的。我建议你不要使用它们。 – 2013-02-24 18:18:43

您正在使用错误的格式说明符scanf()。 而不是%d(表示指向整数的指针),请使用%lf(指向double的指针)。 或者,在您的代码中将double更改为int

请注意,您的printf()声明遭受类似问题,应使用%f,%g%e

有三个不同数字的6个可能的顺序(排列)。

你的代码出现,检查只有3个,分别是为了,

    N3 < N1 < N2

    N3 < N2 < N1

and

    N1 < N3 < N2

在3其他情况下你只return 0,仅此而已。

从我上面的系统清单中,你能猜出另外三个案例的共同之处,它们是如何相似的?


顺便说一句,不问,但你会从吨的麻烦,通过使用C++ cincout,而不是低级别的C函数scanfprintf保存自己。

+0

谢谢你的帮助。 – user2104913 2013-02-24 17:31:23