|
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:void ajustes( char *tmp );
Las 2 llamadas:ajustes( (b+max)->nombre ); ajustes( (b+max)->direccion );
La función:void ajustes( char *tmp ){ char *p = NULL; int ch; *p='\0'; }else{ while((ch = getchar()) !='\n' && ch !=EOF ); } }
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: if((p =strchr((b +max )->nombre , '\n'))){ *p='\0'; }else{ while((ch = getchar()) !='\n' && ch !=EOF ); } ................................ if((p =strchr((b +max )->direccion , '\n'))){ *p='\0'; }else{ while((ch = getchar()) !='\n' && ch !=EOF ); }
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. #include <stdio.h> #include <stdlib.h> typedef struct{ char nombre[30]; char direccion[30]; int edad; }alumno; int main( void ){ alumno *b=NULL; int max=1, i, ch=0, seguir=0; char *p = NULL; do{ b = ( alumno * )realloc( b , (max )*sizeof(alumno )); if( b==NULL ){ printf("\n No se pudo asignar la memoria!"); } printf("\n Ingresa el nombre del alumno [%d]......:", max ); fgets( (b +max )->nombre , 30, stdin ); if((p =strchr((b +max )->nombre , '\n'))){ *p='\0'; }else{ while((ch = getchar()) !='\n' && ch !=EOF ); } printf("\n Ingresa la direccion del alumno [%d]...:", max ); fgets( (b +max )->direccion , 30, stdin ); if((p =strchr((b +max )->direccion , '\n'))){ *p='\0'; }else{ while((ch = getchar()) !='\n' && ch !=EOF ); } printf("\n Ingresa la edad del alumno [%d]........:", max ); scanf( "%d", &(b +max )->edad ); printf( "\n distinto a \"0\" introduce otro alumno.: " ); max++; }while( seguir != 0 ); for ( i=0; i<max; i++ ){ printf( "%s\t%s\t%d\n",(*(b +i )). nombre, (*(b +i )). direccion, (*(b +i )). edad ); } return 0; }
Saludos y gracias. -
|
|
|
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. - #include <stdio.h> #include <stdlib.h> typedef struct{ char nombre[30]; char direccion[30]; int edad; }alumno; int main( void ){ alumno *b=NULL; int max,i; unsigned int ch=0; printf("\n Ingresa la cantidad de alumnos.....:"); b = ( alumno * )malloc( sizeof(alumno )*max ); for( i=0; i<max; i++){ printf("\n Ingresa el nombre del alumnos [%d].....:", i +1); scanf( "%s", (b +i )->nombre ); while((ch = getchar()) !='\n' && ch !=EOF ); printf("\n Ingresa la direccion del alumno [%d]...:", i +1); scanf( "%s", (b +i )->direccion ); while((ch = getchar()) !='\n' && ch !=EOF ); printf("\n Ingresa la edad del alumno [%d]........:", i +1); scanf( "%d", &(b +i )->edad ); printf( "\n ================================================\n" ); } for (i=0;i<max;i++){ printf("%s\t%s\t%d\n",(*(b +i )). nombre,(*(b +i )). direccion,(*(b +i )). edad); } return 0; }
Si alguien me pondría un Ej. relacionado con el código, Danielito muy agradecido - Saludos.
|
|
|
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? - #include <stdio.h> int d( char *a, char *b); int main( void ){ char a[] = "rosita", b[] = "Rosita"; int res; res = d( a, b ); if( res == 0 ) printf( "\n Las frases %s y %s son IGUALES\n\n", a , b ); else if( res < 0 ) printf( "\n %s es MAYOR que %s\n\n", a , b ); else printf( "\n %s es MENOR que %s\n\n", a , b ); return 0; } // Lo que regresa la función: >0 si a<b ==> 0 si a==b ==> <0 si a>b int d( char *a, char *b ){ for( ; *a == *b; a++, b++ ) if( *a == '\0' ) return 0; return *a - *b; }
Desde ya muchas gracias por el tiempo que le dediquen. - 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. - #include <stdio.h> void d( char *c, char *a); int main( void ){ char a[] = "rosita", *b = "rosita", c[7]; a[0] = 'R'; b = a; d( c, a ); return 0; } void d( char *c, char *a ){ while( (*c++ = *a++) ) ; }
Saludos.
|
|
|
|
|
|
|