Uno dei miei amici ha inviato questo codice per me, dicendo che non funziona come previsto:uscita imprevisto dal programma bubblesort con MSVC vs TCC
#include<stdio.h>
void main()
{
int a [10] ={23, 100, 20, 30, 25, 45, 40, 55, 43, 42};
int sizeOfInput = sizeof(a)/sizeof(int);
int b, outer, inner, c;
printf("Size is : %d \n", sizeOfInput);
printf("Values before bubble sort are : \n");
for (b = 0; b < sizeOfInput; b++)
printf("%d\n", a[b]);
printf("End of values before bubble sort... \n");
for (outer = sizeOfInput; outer > 0; outer--)
{
for ( inner = 0 ; inner < outer ; inner++)
{
printf ("Comparing positions: %d and %d\n",inner,inner+1);
if (a[inner] > a[inner + 1])
{
int tmp = a[inner];
a[inner] = a [inner+1];
a[inner+1] = tmp;
}
}
printf ("Bubble sort total array size after inner loop is %d :\n",sizeOfInput);
printf ("Bubble sort sizeOfInput after inner loop is %d :\n",sizeOfInput);
}
printf ("Bubble sort total array size at the end is %d :\n",sizeOfInput);
for (c = 0 ; c < sizeOfInput; c++)
printf("Element: %d\n", a[c]);
}
Sto usando Micosoft comandi di Visual Studio Strumento Line per compilarlo su una macchina Windows XP.
Il mio amico ottiene l'output corretto su una macchina di dinosauri (il codice viene compilato utilizzando TCC lì).
Il mio output è inaspettato. L'array cresce misteriosamente di dimensioni, in mezzo.
Se si modifica il codice in modo che la variabile sizeOfInput
sia stata modificata in sizeOfInputt
, fornisce i risultati previsti!
Una ricerca eseguita a Microsoft Visual C++ Developer Center non fornisce risultati per "sizeOfInput".
Non sono un esperto di C/C++ e sono curioso di scoprire perché questo accade - qualche esperto di C/C++ che può "fare un po 'di luce" su questo?
Nota non correlata: ho seriamente pensato di riscrivere l'intero codice per utilizzare quicksort o unire l'ordinamento prima di postarlo qui. Ma, dopo tutto, non è Stooge sort ...
Edit: so che il codice non è corretto (si legge oltre l'ultimo elemento), ma sono curioso perché il nome della variabile fa la differenza.
Grazie per la modifica, ma appena notato che incasinato le (<>). Tag > e <. – crnlx