在C ++中输出错误数字的数组

我的目标是让玩家为数组输入一堆数字,然后将该数组写入文本文件。它的另一部分是能够从文本文件中接收一堆数字,并将它们放入从高到低的排序数组中,然后输出该数组。但是由于某种原因,我遇到了很多错误,这些错误是我可以解决的一些研究带来的。不幸的是,在一种非常令人困惑的情况下,我通过输出数组的每个元素进行测试,以确保未排序的数组正确。这不是最终程序的一部分,而是目前的测试。我有一个for循环,它可以正常运行,并按预期输出每个数字。然后,在下一个for循环中,应该发生完全相同的事情,但是输出的数字都被弄乱了。我不明白如何。下面的代码

void readFile(string fName) {
    string fileName = fName + ".txt";
    ifstream myFile(fileName);
    char c;
    string num;
    int count = 0;

    // Bring the array from file to int array
    while (!myFile.eof()) {
        myFile.get(c);
        if (isspace(c) && num != "") {
            int n = stoi(num);
            intArray[count] = n;
            count++;
            num = "";
            continue;
        }
        if (!myFile.eof()) {
            num += c;
        }
    }

    for (int i = 0; i < 10; i++) {
        cout << intArray[i] << endl;
    }

    // Sort the array higest to lowest
    for (int i = 0; i < 10; i++) {
        cout << intArray[i] << "       ";
        for (int j = 9; j >= i; j--) {
            if (j == 0) {
                continue;
            }
            if (intArray[j] > intArray[j - 1]) {
                int temp = arr[j];
                intArray[j] = intArray[j - 1];
                intArray[j - 1] = temp;
            }
        }
        cout << endl;
    }
}

很抱歉上面的格式,它很奇怪,所以可以想象代码在函数中。

这是输出:

1
2
3
4
5
6
7
8
99
234
1
1
1
1
1
1
1
1
1
1

一系列1之前的数字是实际的数组,而1显然是根据代码最后一部分中cout的数组,它说cout

gwg81 回答:在C ++中输出错误数字的数组

您的数组确实已排序。之所以要打印所有这些,是由于cout <<在外部循环中的位置。

考虑通过内循环进行第一次迭代后数组的外观:

234,1,2,3,4,5,6,7,8,99

现在考虑在外部循环中您已将i增至1。当您为数组intArray[i]编制索引时,第i个元素现在为1,因为您已将其正确地移到了那里。每次,您都将较小的元素向上移动到数组中的一个位置,然后索引到1所在的位置。

在排序数组时不要尝试打印它。而是将其循环并在排序后打印出来。

本文链接:https://www.f2er.com/3061692.html

大家都在问