Моя цель состоит в том, чтобы игрок ввел кучу чисел для массива, а затем этот массив записался в текстовый файл. Другая часть этого заключается в том, чтобы иметь возможность получать набор чисел из текстового файла и помещать их в отсортированный массив от самого высокого до самого низкого, а затем выводить этот массив. Но по какой-то причине я получаю много ошибок, которые, как мне кажется, можно исправить с помощью некоторых исследований. К сожалению, есть одна очень запутанная ситуация, когда я проверяю правильность несортированного массива, выводя каждый элемент массива. Это не часть финальной программы, а пока тест. У меня есть цикл 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 << intArray[i]
1 ответ
Ваш массив выглядит отсортированным. Причина, по которой все печатаются, связана с расположением cout <<
во внешнем цикле.
Подумайте, как выглядит ваш массив после первой итерации внутреннего цикла:
234,1,2,3,4,5,6,7,8,99
Теперь представьте, что вы увеличили i
до 1 во внешнем цикле. Когда вы индексируете свой массив intArray[i]
, i
-й элемент теперь равен 1, потому что вы правильно переместили его туда. Каждый раз вы перемещаете свои меньшие элементы вверх на одну позицию в массиве, а затем индексируете позицию, где находится 1
.
Не пытайтесь распечатать отсортированный массив во время его сортировки. Вместо этого переберите его и распечатайте после сортировки.
Похожие вопросы
Связанные вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.
while (!stream.eof())
) считается неправильным?