3

私はC++にかなり慣れていないので、参照渡しを使用して3つの数値(最小から最大)をソートするC++プログラムを作成する必要があります。関数内の 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;
}
4

2 に答える 2

5

に間違った書式指定子を使用していますscanf()%d(整数へのポインタを意味する) の代わりに、%lf(Pointer to a double) を使用します。または、コード内で に変更doubleintます。

printf()あなたのステートメントには同様の問題があり、%f%gまたはのいずれかを使用する必要があることに注意してください%e

于 2013-02-24T17:06:22.677 に答える
1

3 つの異なる数の順序 (順列) は 6 通りあります。

あなたのコードは、そのうちの 3 つだけをチェックしているように見えます。

   n3 < n1 < n2

   n3 < n2 < n1

   n1 < n3 < n2

他の3つのケースではreturn 0、それだけです。

上記の体系的なリストから、他の 3 つのケースの共通点、類似点を推測できますか?


ところで、求められたわけではありませんが、C++cinを使用coutすることで、低レベルの C 関数scanfprintf.

于 2013-02-24T17:10:01.470 に答える