ฉันเรียกใช้โค้ดนี้และมันจะขอให้ผู้ใช้ป้อนข้อมูล จากนั้นแฮงค์เมื่อมันเริ่มป้อนตัวเลขทั้งหมดเหล่านั้นลงในตำแหน่งอาเรย์ ฉันได้ทำการทดสอบบางอย่างไว้ที่นี่เพื่อช่วยฉันค้นหาว่าอะไรเป็นสาเหตุของการแฮงค์ ฉันไม่สามารถเข้าใจได้ มันอาจจะเป็นเรื่องง่ายอย่างโง่เขลาหรือมันจะเป็นอะไรบางอย่างกับคอมไพเลอร์ของฉัน (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" โปรแกรมจะกำหนดค่านั้นและ/หรือค่าอื่น ๆ ทั้งหมดที่ป้อน และสามารถตรวจสอบได้ด้วย "การทดสอบ Scanf" ที่ฉันป้อน ซึ่งจะ พิมพ์ตำแหน่งในอาร์เรย์ตามด้วยหมายเลขที่กำหนด หลังจากกำหนดค่าทั้งหมดให้กับอาร์เรย์แล้ว ตามทฤษฎีแล้ว ควรรันการทดสอบถัดไปซึ่งอยู่ต่ำกว่าค่า for loop พอดี ปัญหาคือไม่มี โปรแกรมแฮงค์แทนหลังจากพิมพ์ตำแหน่งและหมายเลขล่าสุดที่ได้รับมอบหมาย....
โปรแกรมไม่ได้ทำอะไรอย่างอื่นนอกจากนั่งเฉยๆ มีคนด้านล่างระบุว่าเขารันโค้ดนี้และทำงานได้ดี...ซึ่งทำให้ฉันเชื่อว่านี่เป็นปัญหาในการคอมไพล์ใน IDU ของฉัน (Code::Blocks)
if (n - 1 > 1)
เป็นif (n - 1 >= 1)
ใช่ไหม - person Mohit Jain   schedule 16.04.2014