elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: [1] 2 3
1  Programación / Programación C/C++ / Re: Ayuda con programa de posición de letras en: 1 Agosto 2015, 11:44 am
Obviamente los mensajes no son exactamente iguales, eso ya sería para llevarse las manos a la cabeza, pero decis cosas muy similares sin ni tan siquiera hacer mención a la persona que lo ha dicho anteriormente, resulta desagradable ver como cada uno dice una cosa sin tener en cuenta lo que ya se ha dicho, un "tal y como ha dicho no se quien..." no vendría mal para establecer un debate humano.
2  Programación / Programación C/C++ / Re: Ayuda con programa de posición de letras en: 31 Julio 2015, 09:31 am
Este post se está convirtiendo en un bucle, parece que cada uno postea su idea sin tener en cuenta lo que ya se ha dicho, engel lex ya ha dicho exactametne lo que acaba de decir do-while, vchar4 pone lo mismo aunq ya se le ha dicho que es un código un tanto trabajoso, etc... sería interesante para todos que tengamos en cuenta lo que dice cada uno, para poder crecer y esas cosas.
3  Programación / Programación C/C++ / Re: Error al guardar muchos datos en arrays multidimensional (lenguaje C) en: 30 Julio 2015, 20:56 pm
La forma adecuada de leer enteros por teclado sin dar pie a problemas es así:

Código
  1. int num;
  2. char buffer[100];//cadena de texto auxiliar para copiar el buffer de entrada
  3. //------
  4. fgets(buffer,100,stdin); //copiamos el buffer de entrada a la cadena auxiliar
  5. sscanf(buffer, "%d", &num); //leemos el entero de la cadena auxiliar
  6.  
Esto se hace precisamente para quitar ese retorno de linea que nos está haciendo la puñeta, ya que con fgets estamos vaciando stdin por completo.

EDIT: también puedes meter ese código en una función para no tener que andar repitiéndolo todo el rato:

Código
  1. int leerEntero(){
  2.    int num;
  3.    char buffer[100];//cadena de texto auxiliar para copiar el buffer de entrada
  4.    fgets(buffer,100,stdin); //copiamos el buffer de entrada a la cadena auxiliar
  5.    sscanf(buffer, "%d", &num); //leemos el entero de la cadena auxiliar
  6.    return num;
  7. }
  8.  

También añado que leer una cadena de texto con gets es inseguro ya que gets no controla el numero máximo de caracteres que vas a leer, por tanto deberías usar fgets también. Es decir, en lugar de:

Código
  1. gets(nom_alum[i]);
  2.  

Usa:

Código
  1. fgets(nom_alum[i],30,stdin);
  2.  

Por ultimo, decirte que he puesto 30 pero lo correcto es usar un DEFINE arriba del todo para no tener que andar poniendo 30 por todas partes, es decir:
Código
  1. #define MAX_CHARS 30 //esto arriba del todo
  2. int main(...){
  3. //.....
  4. char nom_alum[10][MAX_CHARS];
  5. //.....otras declaraciones....
  6. //.....hacer tareas.....
  7.  
  8. fgets(nom_alum[i], MAX_CHARS,stdin);
  9. //.....
  10. }
  11.  
4  Programación / Programación C/C++ / Re: [C++][?] C++ Integración con wxWidget - Aplicación Cliente/Servidor en: 30 Julio 2015, 20:48 pm
De entrada te diría que no usaras esa parte de wxWidgets, pues es bien sabido que son muy incompletas. Usa wxWidgets solo para lo que es la creación del GUI y poco más. Si quieres una biblioteca buena para hacer aplicaciones cliente/servidor usa BOOST.

Y respondiendo a tu pregunta, sí, deberías actuar de forma totalmente apartada.
5  Programación / Programación C/C++ / Re: Error al guardar muchos datos en arrays multidimensional (lenguaje C) en: 30 Julio 2015, 13:17 pm
Sí lo del retorno del línea es cierto, pero es que fflush(stdin); no deberia solucionarlo. ¿A ti te funciona? Porque eso es muy raro que funcione, pero bueno si te va bien así déjalo, aunque ya te digo que a mi eso nunca me ha funcionado, la solucion correcta es otra más compleja, si quieres más adelante te la explico.

Y sí, yo creo que con eso ya estaría todo arreglado, si no te funciona y no encuentras el error pues coméntalo.
6  Programación / Programación C/C++ / Re: Criba de Eratostenes en C con funciones. en: 30 Julio 2015, 13:06 pm
Por cierto, creo que declarar un array de tamaño variable de esa forma no es muy adecuado, deberías usar malloc.

De hecho es que no se puede hacer. Si ese programa compila es que no es C, quiza es alguna versión rara de C, pero en C estándar ese código no puede compilar.

Código
  1. int n;
  2. scanf("%d",&n);
  3. int v[n];//esto no puede hacerse en C estándar
  4.  

Lo correcto sería:

Código
  1. int n;
  2. scanf("%d",&n);
  3. int *v = (int*) malloc(n*sizeof(int));
  4. //... hacer tareas
  5. free(v);//al final del programa hay que liberar la memoria, si esto no se hace, quizá no pase nada ya
  6. //que el sistema operativo se encargará de liberarla, pero lo mas adecuado es liberarla aquí.
  7.  
7  Programación / Programación C/C++ / Re: Error al guardar muchos datos en arrays multidimensional (lenguaje C) en: 30 Julio 2015, 12:45 pm
Perfecto, seguimos:

Código
  1. fflush(stdin);
  2.  
Esto tampoco tiene efecto, fflush sirve para vaciar los buffer de salida, los de entrada no puedes vaciarlos de esta manera. Asique elimina también estas líneas.

Si solo quieres 3 trayectos pues declara solo 3:
Código
  1. int  not_tra[3][10];
  2.  

Y el primer trayecto sera el 0 el segundo el 1 y el tercero el 2. Acostumbrate a reccorrer los arrays de esa manera, así es como se debe hacer siempre en C.

Con respecto a esto:

Código
  1.                        for(j=1; j<cant_mate+1; j++){
  2.                            printf("\n\nIngrese las notas parciales de %s\n", nom_mate[j]);
  3.  
  4.                                printf("\n===== Trayecto 1 =====\n\n");
  5.                                    for (k=1; k<cant_nota+1; k++){
  6.                                        printf("Nota %d: ", k);
  7.                                        fflush(stdin);
  8.                                        scanf("%d",&not_tra1[k]);
  9.                            }
  10.                                printf("\n===== Trayecto 2 =====\n\n");
  11.                                    for (k=1; k<cant_nota+1; k++){
  12.                                        printf("Nota %d: ", k);
  13.                                        fflush(stdin);
  14.                                        scanf("%d",&not_tra2[k]);
  15.                            }
  16.                                printf("\n===== Trayecto 3 =====\n\n");
  17.                                    for (k=1; k<cant_nota+1; k++){
  18.                                        printf("Nota %d: ", k);
  19.                                        fflush(stdin);
  20.                                        scanf("%d",&not_tra3[k]);
  21.                            }
  22.                        }
  23.                    }
  24.  

Lo puedes sustituir por:

Código
  1.    int tra;//variable contadora para el bucle de trayectos, la puedes declarar en otro sitio si quieres.
  2.    for(j=1; j<cant_mate+1; j++){
  3.        printf("\n\nIngrese las notas parciales de %s\n", nom_mate[j]);
  4.        for(tra=0; tra<3; tra++){
  5.             printf("\n===== Trayecto %d =====\n\n",tra+1);
  6.             for (k=0; k<cant_nota; k++){
  7.                  printf("Nota %d: ", k+1);            
  8.                  scanf("%d",&not_tra[tra][k]);
  9.             }              
  10.        }
  11.   }
  12.  

Fijate en como cambia la forma de recorrer el array:
Código
  1. for (k=1; k<cant_nota+1; k++) //mal
  2. for (k=0; k<cant_nota; k++) //bien
  3.  



8  Programación / Programación C/C++ / Re: Error al guardar muchos datos en arrays multidimensional (lenguaje C) en: 30 Julio 2015, 11:26 am
Esta parte del código está mal:

Código
  1. //Arrays para nombres de alumnos y materias ---Arrays de caracteres---//
  2.    char nom_alum[cant_alum][30];
  3.    char nom_mate[cant_mate][40];
  4. //Arrays para notas de trayectos ---not_tra1 = notas del trayecto1--- //
  5.  
  6.    int  not_tra1[4][cant_nota];    
  7.    int  not_tra2[4][cant_nota];
  8.    int  not_tra3[4][cant_nota];
  9.  
  10.    //Llamando a las variables globales//
  11.    cant_alum;
  12.    cant_mate;
  13.    cant_nota;
  14.  

No puedes definir el tamaño de un array con una variable, es decir:
Código
  1. char nom_alum[cant_alum][30];
  2. char nom_mate[cant_mate][40];
  3. int not_tra1[4][cant_nota];

Deberia ser:
Código
  1. char nom_alum[10][30];
  2. char nom_mate[10][40];
  3. int not_tra1[4][10];

He puesto 10, pero eso no quiere decir que haya q usar las 10, sino que como maximo tenemos 10.

Otra cosa es que si ya estas creando varios arrays para cada trayecto entonces el [4] sobra, aunque quedaria más organizado en un solo array, es decir, en lugar de:
Código
  1.    int  not_tra1[4][cant_nota];    
  2.    int  not_tra2[4][cant_nota];
  3.    int  not_tra3[4][cant_nota];
  4.  

Deberías poner:
Código
  1.    int  not_tra[4][10];    
  2.  

Luego esta parte:
Código
  1. //Llamando a las variables globales//
  2.    cant_alum;
  3.    cant_mate;
  4.    cant_nota;
  5.  
No sirve para nada, no tiene efecto, esas lineas las puedes eliminar directamente.

Cuando entiendas eso respónde al post y seguimos.
9  Programación / Programación C/C++ / Re: Coordenadas de Matriz en Console C++ en: 30 Julio 2015, 09:05 am
A ver, supongamos que el array lo llenamos con unos y ceros (1:ocupado 0:libre), el usuario no tiene que ingresar ninguna coordenada, tan solo una columna, y tu debes recorres esa columna hasta encontrar un 1, una vez encuentres el 1 debes cambiar el valor superior por un 1.

Ese es el principio básico. Luego tendrás que establecer más condiciones, como por ejemplo que si llegas a la fila 10 y no has encontrado ningun 1 pues coloques un 1 en la fila 10. También que si hay un 1 en la fila 1 no te permita hacer la jugada, etc.
10  Programación / Programación C/C++ / Re: Duda sobre punteros en C en: 29 Julio 2015, 22:33 pm
A ver, cuando escribes
Código
  1. char *comp;
estás reservando en memoria una sola variable que almacenará un puntero a char. Sin embargo tu necesitas reservar una variable para cada carácter, por eso es necesario crear un array
Código
  1. char comp[40];
De esa manera reservas 40 variables en memoria y tienes espacio para 40 caracteres (en realidad para 39, ya que el ultimo debe dejarse libre para el carácter nulo que indica la finalización de cadena).

El nombre de un array devuelve la dirección de memoria del primer elemento del array, es decir en este caso escribir comp es lo mismo que escribir &comp[0]

Al llamar a scanf("%s",comp) estás haciendo que los caracteres introducido por teclado se guarden en la memoria, la primera dirección de memoria en la que se guarda el primer carácter es la que le pasamos por parámetro, en este caso es la apuntada comp, el segundo carácter se guardara en esa misma direcion+1 y así hasta terminar.

Por tanto, si declaras comp como puntero y no reservas espacio en memoria y luego intentas llenar la memoria sin haberla reservado previamente puedes dar lugar a error o funcionamientos impredecibles.
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines