Hola, estoy haciendo un programa en C++ que lee datos de un archivo.csv, llena un vector y los muestra en pantalla.
El archivo es algo como:
1,2,3
4,5,6
7,8,9
Eso ya está hecho, pero debo ordenarlo, la cuestión es que como el vector es de caracteres, el método de ordenamiento que hago me da como resultado:
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
Así que traté de convertir los caracteres a enteros, pero ahora me da como resultado:
0
0
0
0
0
0
0
0
0
0
¿Alguien me podría sugerir algo por favor?
De [URL="http://www.mediafire.com/?wom1mxocfzw"]acá[/URL] pueden descargar el proyecto completo, no pesa mucho.
Dejo el código por si alguien quiere ayudarme.
Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//Funciones
void llenar();
int ordenar();
//Variables
char vector[11];
int dato;
int i,j,aux,n,op;
main()
{
do
{
system ("cls");
printf("Menu principal \n\n");
printf("1- Mostrar Datos \n");
printf("2- Ordenar \n");
//printf("3- Mostrar dato más repetido \n");
printf("3- Salir\n\n");
printf("Que desea hacer: ");
scanf("%i",&op);
switch(op)
{
case 1 : llenar();
break;
case 2 : ordenar();
break;
/*case 3 : recorrer();
break;*/
}
}while(op != 3) ;
}
void llenar()
{
FILE *archivo;
archivo = fopen("prueba.csv","r"); //abre archivo y prepara para escritura
if (archivo == NULL) //si no puede abrir el archivo
printf("Error al abrir el archivo");
getch();
printf("\nEl contenido del archivo de prueba es: \n\n");
while (feof(archivo) == 0) //mientras no esté en el final del archivo
{
for(i=0; i<11; i++)
{
dato = fgetc(archivo); //lee uno a uno cada caracter del archivo
vector[i]= dato;
printf("%c",vector[i]);
}
}
fclose (archivo); //cierra el archivo
getch();
}
int ordenar()
{
FILE *archivo; //abre archivo y prepara para escritura
archivo = fopen("prueba.csv","r");
if (archivo == NULL) //si no puede abrir el archivo
printf("Error al abrir el archivo");
getch();
printf("\nLos datos ordenados son: \n\n");
while (feof(archivo) == 0) //mientras no esté en el final del archivo
{
for(i=0; i<11; i++) //Recorro el vector
{
dato = fgetc(archivo); //obtengo los datos
if(dato == 'a')
break;
else
vector[i]= dato; //lleno el vector con los datos
for (i=0;i<11;i++) //empiezo el ordenamiento
{
for (j=i+1;j<11;j++)
{
/*switch (dato) //convierte caracteres en numeros
//esta forma no sirvió por que me mostraba el caracter ascci
{
case '0': dato=0;
break;
case '1': dato=1;
break;
case '2': dato=2;
break;
case '3': dato=3;
break;
case '4': dato=4;
break;
case '5': dato=5;
break;
case '6': dato=6;
break;
case '7': dato=7;
break;
case '8': dato=8;
break;
case '9': dato=9;
break;
}*/
dato=int(vector); //convierte de caracteres a enteros
if (vector[i]>vector[j]) //ordena de menor a mayor
{
aux=vector[i];
vector[i]=vector[j];
vector[j]=aux;
printf ("%i\n",vector[i]);
}
}
}
}
fclose (archivo);
getch();
return(0);
}
}