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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 37
51  Programación / Programación C/C++ / Si aprieto <enter> sin ningún ingreso fgets no me devuelve un puntero null en C. en: 21 Enero 2017, 21:34 pm
Hola, ¿cómo están?
Una consulta rapidita, alguien me puede decir que estoy haciendo mal, el puntero que devuelve fgets nunca es nulo, ¿por qué? .-

Código
  1. do{
  2. ok=1;
  3. printf("\n Ingresa el nombre del alumno [%d]......:", max+1);
  4. if( fgets( (b+max)->nombre, 30, stdin ) == NULL ){
  5. ok=0;
  6. printf( "\n El dato es obligatorio..." );
  7. printf( "\n Pulsa <Enter> para intentarlo nuevamente..." ); getchar();
  8. }
  9. }while(!ok);
  10. ajustes( (b+max)->nombre );

Saludos.
52  Programación / Programación C/C++ / Re: Pasar un campo(miembro) de una estructura a función por referencia.[C] en: 17 Enero 2017, 17:53 pm
Creo que es la primera vez que logro la solución de algo antes que me respondan en este foro tan dinámico, dejo a continuación como lo hice y me gustaría que alguien me diga como comprobar si realmene se ha insertado el fin de cadena (\0) en el caso de haber ingresado menos de 29 caracteres (obvio con fgets). - 

prototipo:
Código
  1. void ajustes( char *tmp );
Las 2 llamadas:
Código
  1. ajustes( (b+max)->nombre );
  2. ajustes( (b+max)->direccion );
  3.  
La función:
Código
  1. void ajustes( char *tmp ){
  2. char *p = NULL;
  3. int ch;
  4.  
  5. if(( p=strchr( tmp , '\n'))){
  6. *p='\0';
  7. }else{
  8. while((ch = getchar()) !='\n' && ch!=EOF);
  9. }
  10.  
  11. strcpy( tmp, "Arequito" );
  12. }
Saludos.
53  Programación / Programación C/C++ / Pasar un campo(miembro) de una estructura a función por referencia.[C] en: 17 Enero 2017, 15:09 pm
Hola, que tengan un muy buen día.
Tengo una duda y espero en primer lugar que se entienda lo que no logro hacer y luego que pueda alguien darme la solución. -

Estas líneas de código las quiero pasar a una función:
Código
  1. if((p=strchr((b+max)->nombre, '\n'))){
  2. *p='\0';
  3. }else{
  4. while((ch = getchar()) !='\n' && ch!=EOF);
  5. }
  6. ................................
  7. if((p=strchr((b+max)->direccion, '\n'))){
  8. *p='\0';
  9. }else{
  10. while((ch = getchar()) !='\n' && ch!=EOF);
  11. }
  12.  

En primer lugar, pasar un solo campo y no el total de la estructura.
luego que los cambios efectuados en la función llamada se vean reflejado en la función llamadora(main). -

El código completo.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct{
  5. char nombre[30];
  6. char direccion[30];
  7. int edad;
  8. }alumno;
  9.  
  10. int main( void ){
  11. alumno *b=NULL;
  12. int max=1, i, ch=0, seguir=0;
  13. char *p = NULL;
  14.  
  15. do{
  16. b = ( alumno * )realloc( b, (max)*sizeof(alumno));
  17. if( b==NULL ){
  18. printf("\n No se pudo asignar la memoria!");
  19. exit(EXIT_FAILURE);
  20. }
  21. printf("\n Ingresa el nombre del alumno [%d]......:", max);
  22. fgets( (b+max)->nombre, 30, stdin );
  23.  
  24. if((p=strchr((b+max)->nombre, '\n'))){
  25. *p='\0';
  26. }else{
  27. while((ch = getchar()) !='\n' && ch!=EOF);
  28. }
  29.  
  30. printf("\n Ingresa la direccion del alumno [%d]...:", max);
  31. fgets( (b+max)->direccion, 30, stdin );
  32.  
  33. if((p=strchr((b+max)->direccion, '\n'))){
  34. *p='\0';
  35. }else{
  36. while((ch = getchar()) !='\n' && ch!=EOF);
  37. }
  38.  
  39. printf("\n Ingresa la edad del alumno [%d]........:", max);
  40. scanf( "%d", &(b+max)->edad );
  41.  
  42. printf( "\n distinto a \"0\" introduce otro alumno.: " );
  43. scanf( "%d", &seguir );
  44. max++;
  45. }while( seguir != 0 );
  46.  
  47. for ( i=0; i<max; i++ ){
  48. printf( "%s\t%s\t%d\n",(*(b+i)).nombre, (*(b+i)).direccion, (*(b+i)).edad );
  49. }
  50.  
  51. free( b );
  52.  
  53. return 0;
  54. }

Saludos y gracias. -
54  Programación / Programación C/C++ / Re: Como liberar memoria en estructura dinámica [C] en: 13 Enero 2017, 14:25 pm
Hola, gracias por ocuparte. -
Me pregunto, al ser un array de estructura no debería hacer un bucle primero para liberar cada uno de los punteros, discúlpame la ignorancia. -
55  Programación / Programación C/C++ / Como liberar memoria en estructura dinámica [C] en: 13 Enero 2017, 12:01 pm
Hoa, gente ¿cómo están?
Bueno no tengo mucho para agregar, por más que busco en internet no puedo encontrar un Ej. concreto de como liberar la memoria en una estructura dinámica. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct{
  5. char nombre[30];
  6. char direccion[30];
  7. int edad;
  8. }alumno;
  9.  
  10. int main( void ){
  11. alumno *b=NULL;
  12. int max,i;
  13. unsigned int ch=0;
  14.  
  15. printf("\n Ingresa la cantidad de alumnos.....:");
  16. scanf("%d", &max);
  17. b = ( alumno * )malloc( sizeof(alumno)*max );
  18. for( i=0; i<max; i++){
  19. printf("\n Ingresa el nombre del alumnos [%d].....:", i+1);
  20. scanf( "%s", (b+i)->nombre );
  21. while((ch = getchar()) !='\n' && ch!=EOF);
  22. printf("\n Ingresa la direccion del alumno [%d]...:", i+1);
  23. scanf( "%s", (b+i)->direccion );
  24. while((ch = getchar()) !='\n' && ch!=EOF);
  25. printf("\n Ingresa la edad del alumno [%d]........:", i+1);
  26. scanf( "%d", &(b+i)->edad );
  27. printf( "\n ================================================\n" );
  28. }
  29.  
  30. for (i=0;i<max;i++){
  31. printf("%s\t%s\t%d\n",(*(b+i)).nombre,(*(b+i)).direccion,(*(b+i)).edad);
  32. }
  33.  
  34. return 0;
  35. }

Si alguien me pondría un Ej. relacionado con el código, Danielito muy agradecido -
Saludos.
56  Programación / Programación C/C++ / Re: strcmp a mano // operador ternario // #define en lenguaje C en: 29 Diciembre 2016, 14:21 pm
Bien amigo es lo que necesitaba, me parece que me faltaba algún paréntesis por ello no lo podía hacer. -
Gracias.
57  Programación / Programación C/C++ / strcmp a mano // operador ternario // #define en lenguaje C en: 29 Diciembre 2016, 12:46 pm
Hola, muy buen día para todos.
Hoy no les consulto por un error sino por algo que por más que busco en la web no encuentro la respuesta, ¿es posible agrupar desde la línea 10 a la 15 con un operador ternario y de no ser así me podrían dar alguna idea de como hacerlo con un #define? -

Código
  1. #include <stdio.h>
  2.  
  3. int d( char *a, char *b);
  4.  
  5. int main( void ){
  6. char a[] = "rosita", b[] = "Rosita";
  7. int res;
  8.  
  9. res = d( a, b );
  10. if( res == 0 )
  11. printf( "\n Las frases %s y %s son IGUALES\n\n", a, b );
  12. else if( res < 0 )
  13. printf( "\n %s es MAYOR que %s\n\n", a, b );
  14. else
  15. printf( "\n %s es MENOR que %s\n\n", a, b );
  16.  
  17. return 0;
  18. }
  19.  
  20.  
  21. // Lo que regresa la función: >0 si a<b ==> 0 si a==b ==> <0 si a>b
  22. int d( char *a, char *b ){
  23.  
  24. for( ; *a == *b; a++, b++ )
  25. if( *a == '\0' )
  26. return 0;
  27.  
  28. return *a - *b;
  29. }


Desde ya muchas gracias por el tiempo que le dediquen. -
Saludos.
58  Programación / Programación C/C++ / Re: Función strcpy propia en lenguaje C. (copiar una cadena en otra) en: 27 Diciembre 2016, 22:07 pm
Ahora si nos entendemos, correctísimo, me funciona todo a la perfección, muchas gracias. - ;-) ;-) ;-)

Un abrazo.
59  Programación / Programación C/C++ / Re: Función strcpy propia en lenguaje C. (copiar una cadena en otra) en: 27 Diciembre 2016, 21:52 pm
MAFUS, estas en lo correcto, para no romperme tanto la cabeza, ¿me podrías decir como apuntar al primer carácter de c sin efectuar un nuevo bucle? -

EDITO: Con la siguiente linea lo consigo, desconozco si hay una manera mejor. -
Código
  1. c -=7;

Saludos.
60  Programación / Programación C/C++ / Función strcpy propia en lenguaje C. (copiar una cadena en otra) en: 27 Diciembre 2016, 20:35 pm
Hola, gente ¿cómo están? ya los extrañaba. -
Estoy repasando punteros y me encuentro en el libro de los autores de C (creo que lo son) con esta función(d) que no logro hacer que de los resultados esperados, me podrían decir que estoy haciendo mal. -

Código
  1. #include <stdio.h>
  2.  
  3. void d( char *c, char *a);
  4.  
  5. int main( void ){
  6. char a[] = "rosita", *b = "rosita", c[7];
  7.  
  8. printf("\n %s", a );
  9. printf("\n %s \n\n ", b );
  10.  
  11. a[0] = 'R';
  12. b = a;
  13.  
  14. printf("\n %s", a );
  15. printf("\n %s \n\n ", b );
  16.  
  17. d( c, a );
  18.  
  19. return 0;
  20. }
  21.  
  22.  
  23.  
  24. void d( char *c, char *a ){
  25. while( (*c++ = *a++) )
  26. ;
  27.  
  28. printf("\n %s\n", c );
  29. }
  30.  
Saludos.
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 37
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines