Uno de mis amigos envía este código para mí, diciendo que no funciona como se esperaba:salida inesperada del programa 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]);
}
estoy usando Micosoft Estudio del sistema de Visual Line Tool para compilar esto en una máquina con Windows XP. cl /EHsc bubblesort01.c
Mi amigo obtiene la salida correcta en una máquina de dinosaurios (el código se compila utilizando TCC allí).
Mi salida es inesperada. La matriz crece misteriosamente de tamaño, en el medio.
Si cambia el código para que la variable sizeOfInput
se cambie a , ¡obtendrá los resultados esperados!
Una búsqueda realizada en Microsoft Visual C++ Developer Center no da ningún resultado para "sizeOfInput".
No soy un experto en C/C++, y tengo curiosidad por saber por qué sucede esto, ¿algún experto en C/C++ que pueda "arrojar algo de luz" sobre esto?
Nota no relacionada: pensé seriamente en volver a escribir todo el código para usar el ordenamiento rápido o el tipo de fusión antes de publicarlo aquí. Pero, después de todo, no es el tipo de Stooge ...
Editar: Sé que el código no es correcto (se lee más allá del último elemento), pero tengo curiosidad de por qué el nombre de la variable hace la diferencia.
Gracias por la edición, pero acabo de notar que en mal estado los (<>). > etiquetas y <. – crnlx