Я запускаю этот код, и он запрашивает ввод пользователя, а затем зависает, когда начинает вводить все эти числа в позицию массива. Я разместил здесь несколько тестов, чтобы помочь мне понять, что вызывает зависание. Я не могу понять это. Это либо что-то глупо простое, либо что-то с моим компилятором (Code::Blocks).
// Chapter 9 Programming Project #1
#include <stdio.h>
#define N 10
void selection_sort(int n, int a[]);
int main(void)
{
int i, a[N];
printf("Enter a series of integers: ");
for (i = 0; i < N; i++) {
scanf("%d", &a[i]);
printf("Scanf Test #%d and %d\n", i, a[i]);
}
printf("Scanf Test\n");
selection_sort(N - 1, a);
// iterate through array
for (i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
void selection_sort(int n, int a[n])
{
// Search for the highest value
// Place that value at the end
// Call the function with the end of the array removed
// Create a way for it to break the cycle
int i, temp, high = n;
printf("Function Called\n");
for (i = 0; i < n; i++) {
printf("Test: %d", i);
if (a[i] > a[high]) {
temp = a[high];
a[high] = a[i];
a[i] = temp;
printf("Test Pass: %d\n", i);
if (n - 1 > 1)
selection_sort(n - 1, a);
}
}
}
Примечание. Эта программа печатает Scanf Test #0 and 1
снова и снова, пока последнее число не будет присвоено его позиции в a[i]
....где #0 and 1
, 1 будет первым числом, введенным пользователем.
Редактировать: чтобы устранить путаницу, если пользователь ввел только 1 число, равное «1», тогда программа присвоит это значение и/или все другие введенные значения, и это можно проверить с помощью «Теста сканирования», который я ввел, который будет выведите позицию в массиве, за которой следует номер, который ей был присвоен. После того, как все значения были присвоены массиву, теоретически он должен запустить следующий тест, который находится прямо под циклом for. Проблема в том, что это не так, вместо этого программа зависает после распечатки последней позиции и номера, который был назначен....
Программа не делает ничего другого, а просто сидит там, один человек ниже заявил, что он запустил этот код, и он работал нормально... что заставляет меня поверить, что это проблема компиляции в моем IDU (Code::Blocks)
if (n - 1 > 1)
не следует заменить наif (n - 1 >= 1)
? - person Mohit Jain   schedule 16.04.2014