Hola a todos !
Alguien podria ojear este codigo y decirme donde esta la violacion de segmento??
/*DICCIONARIO*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int desde;
int hasta;
char nombre[25]; He suprimido esta variable que estaba duplicada, pero sigue el problema..
void calcula (void);
int main()
{
int ndopcion;
printf("\n\n\t\t\t\tMENU\n\n");
printf("\n\t\t1\tNumeroS\n\t\t2\tMayusculaS\n\t\t3\tMinusculaS\n\t\t4\tVaciO\n\t\t5\tVaciO\n");
printf ("\nIntroduza numero de opcion: ");
scanf (" %d" ,&ndopcion);
switch (ndopcion)
{
case 1:
{
desde=48;
hasta=57;
calcula();
}
break;
case 2:
{
desde=65;
hasta=90;
calcula();
}
break;
case 3:
{
desde=97;
hasta=122;
calcula();
}
break;
case 4:
{
}
break;
case 5:
{
}
break;
}
}
void calcula (void)
{
int a, b, c, d, e, f, g, h;
char clv[8];
char nombre[20];
printf("\nIntroduzca nombre del archivo de salida: ");
gets(nombre);
FILE *hoja1;
hoja1 = fopen (nombre , "wt");
if (hoja1 == NULL)
printf ("No se ha podido crear el fichero");
else
for (a=desde; a<= hasta; a++)
{
clv[0] = a;
for (b=desde; b <= hasta; b++)
{
clv[1] = b;
for (c=desde; c<= hasta; c++)
{
clv[2] = c;
for (d=desde; d<= 90; d++)
{
clv[3] = d;
for (e=desde; e<=hasta; e++)
{
clv[4] = e;
for (f=desde; f<= hasta; f++)
{
clv[5] = f;
for (g=desde; g<=hasta; g++)
{
clv[6] = g;
for(h=desde; h <= hasta; h++)
{
clv[7] = h;
fwrite (clv, sizeof(clv), 1, hoja1);
}
}
}
}
}
}
}
}
fclose(hoja1);
printf("\n%s", clv);
printf("\nArchivo cerrado\n\n ");
}
Esto va en el apartado de C/C++, no en Programación General.
El código, entre etiquetas GeSHi, C, para que se lea mejor.
Ahora le echo un vistazo.
Edito:
CitarHe suprimido esta variable que estaba duplicada, pero sigue el problema..
Eso comentalo, por favor. (// - /* */)
Cita de: ivancea96 en 31 Diciembre 2013, 00:09 AM
Esto va en el apartado de C/C++, no en Programación General.
El código, entre etiquetas GeSHi, C, para que se lea mejor.
Ahora le echo un vistazo.
Edito: Eso comentalo, por favor. (// - /* */)
ok muchas gracias perdon soy nuevo :S y aun no me familiarizo bn con las etiquetas
El "gets" no llega a pedir ningún nombre. Usa en su lugar, scanf(), por ejemplo.
C++ - Malas prácticas (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html). Échale un ojo a ese hilo. Explica por qué "gets()", entre otros, no se debe utilizar.
2 cosas más, creo que ya para terminar:
1: Explica que pretendes que haga tu programa.
2: Creo que se más o menos lo que pretendías hacer. ¿Todas las combinaciones posibles? Ni se te ocurra. suponiendo que elijas números, hay 10: 10^8 (hay 8 ciclos for).
100000000 lineas escribirás en ese archivo. 100000000*8. Eso da más de 100 gigas de archivo, si no me equivoco. En primer lugar, ese programa no acabará. Reza por que no acabe. Y en segundo lugar, no te recomiendo abrir ese archivo, al menos no con el bloc de notas.
Bueno, suerte. Y ten cuenta lo que va a hacer un programa. Los ordenadores son rápidos, pero no mágicos jaja
Cita de: ivancea96 en 31 Diciembre 2013, 00:24 AM
2 cosas más, creo que ya para terminar:
1: Explica que pretendes que haga tu programa.
2: Creo que se más o menos lo que pretendías hacer. ¿Todas las combinaciones posibles? Ni se te ocurra. suponiendo que elijas números, hay 10: 10^8 (hay 8 ciclos for).
100000000 lineas escribirás en ese archivo. 100000000*8. Eso da más de 100 gigas de archivo, si no me equivoco. En primer lugar, ese programa no acabará. Reza por que no acabe. Y en segundo lugar, no te recomiendo abrir ese archivo, al menos no con el bloc de notas.
Bueno, suerte. Y ten cuenta lo que va a hacer un programa. Los ordenadores son rápidos, pero no mágicos jaja
amigo muchas gracias no me había percatado de ese pequeño xD detalle y si estas en lo correcto xddd gracias ivancea96
Como dato curioso, dejé el programa 20 segundos, y me generó 1 giga de txt. Sin querer, abrí el txt, y así fue como se me paró el ordenador 1 minuto jaja
jaajjaja xD ;-)