我是C ++的新手,我必须制作一个C ++程序,使用传递引用对3个数字(最小 - 最大)进行排序。一切正常,直到我的函数中的if语句。我试过做了很多调试,似乎只要我使用“<”声明没有执行。如果我(n1 > n2)
,无论如何都会执行该语句。如果有人能提供帮助,那就太棒了。这是我的代码:
#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 :(得分:5)
您使用的scanf()
格式说明符错误。
使用%d
(指向%lf
的指针)代替double
(表示指向整数的指针)。
或者,在代码中将double
更改为int
。
请注意,您的printf()
语句遇到类似问题,应该使用%f
,%g
或%e
。
答案 1 :(得分:1)
有三种不同数字的6种可能的顺序(排列)。
您的代码似乎只检查其中的3个,即按顺序
n3&lt; n1&lt; N2
和
n3&lt; n2&lt; N1
和
n1&lt; n3&lt; N2
在其他3个案例中,你只是return 0
而且就是这样。
从我上面的系统列表中,您能猜出其他三个案例的共同点,它们是如何相似的吗?
顺便说一下,没有要求,但是你可以通过使用C ++ cin
和cout
代替低级C函数scanf
和{{1}来避免麻烦。 }}