Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - eduu15

#11
Ahora estoy confuso... Y que diferencia habria entre el codigo https://foro.elhacker.net/programacion_cc/mostrar_una_cadena_sin_especificar_su_tamano-t482323.0.html;msg2159218#msg2159218 y hacer un
#include <stdio.h>
int main(){

int c;

while((c=getchar()) && !=EOF){
      putchar(c);
return 0;

}
#12
Vale ya entiendo gracias
#13
Lo primero gracias por el code y lo segundo en el primer realloc no seria como hacer un malloc? porque al pasarle NULL se va a comportar como un malloc si no me equivoco ya que no estas reasignando memoria al pasarle NULL. No seria mejor hacer str=malloc(i+chunk) o un str=calloc(i+chunk)?
#14
Con fgets casis seguro que no se puede al tener que pasarle el numero de bytes
#15
Estaba pensando en otros lenguajes que derivan de c y se me vino a la cabeza python.
Y la idea que tengo en c en python es la funcion input en python3 y raw_input en python2, no se si es el mejor ejemplo pero el codigo en PYTHON3 seria algo asi:

while(1):
   teclado=str(input("Introduce lo que quieras: ")) #str convierte a string lo que le pasemos a input
   print(teclado)

Cada linea en python son 10 en c xD
CitarComplicandolo un poco mas
while(1):
   teclado=str(input("Introduce lo que quieras o exit para salir: "))
   
   if(teclado=="exit"):
       break
   print(teclado)


Espero que ahora se haya entendido bien



#16
CitarPuede resultar un poco confuso pero mas o menos la idea seria esta:
    #include <stdio.h>
    #include <stdlib.h>
     
    void limpiar( void ){
        system("cls||clear");
    }
     
    int main( void ){
        size_t tam_frases = 0, i;
        char **frases = NULL, salir;
     
        do {
            limpiar();
            frases = realloc(frases, (tam_frases + 1) * sizeof(char*));
            if(!frases) {
                fprintf(stderr, "\n\n *** Error al adquirir memoria ***\n\n");
                exit(1);
            }
     
            printf("\nIngrese frase....: ");
            scanf("%m[^\n]%*c", &frases[tam_frases]);
            ++tam_frases;
     
            printf("\nPara continuar \"S\" para finalizar \"N\"....: ");
            scanf("%c%*[^\n]%*c", &salir);
        } while(salir != 'n' && salir != 'N');
     
        printf ("\n Frases introducidas.....: ");
     
        for(i = 0; i < tam_frases; ++i)
            printf("\n>> %s", frases[i]);
     
        for(i = 0; i < tam_frases; ++i)
            free(frases[i]);
     
        return 0;
    }


POST del codigo de MAZUS: https://foro.elhacker.net/programacion_cc/arreglo_de_cadenas_con_memoria_dinamica_realloc_lenguaje_c-t458601.0.html;msg2090624#msg2090624
en este codigo no se especifica ningun tamaño se reserva segun se necesita para lo que el usuario teclee si mal no entendi el codigo
#17
-La idea que tenia que no la he podido implementar pero dudo que se pueda, es que al pedir un nombre y apellido al usuario a priori NO SABEMOS cual va a ser la longitud de stdin que teclee el usuario. En la linea del malloc puse 10 por poner como pude haber puesto 20 pero en realidad no se cuanto va a ocupar el nombre y el apellido que me ingrese el usuario por teclado no se como implementarlo de tal manera que cuando se teclee un nombre y un apellido se calcule la longitud y luego ya reservar memoria para esa longitud a parte tambien para reservar la memoria justa y necesaria para lo que me teclee el usuario y no andar a ciegas suponiendo que va ingresar un nombre y apellido de 10,20,30 etc bytes

-Como no me salio la idea hice esto que no se parece en nada a mi idea y que aun por encima no consigo hacer que funcione
Espero haberme explicado con claridad y gracias
CitarPrimera duda, porque el codigo no funciona?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
   char *nombre,*nombre2;
   nombre=malloc(10*sizeof(char)); //reservo 10 bytes
   printf("Introduce tu nombre y apellido: ");

   fgets(nombre,9,stdin); //agrega NULL y \n si se ingresan menos caracteres
   if (nombre[strlen(nombre)-1] == '\n'){
       nombre[strlen(nombre)-1] = '\0';
   }

   printf("%s\n",nombre);

   long int longitud=(strlen(nombre)+1); //strlen no cuenta el NULL de final de cadena
   printf("%li\n",longitud);

   if(longitud>8){
      nombre2=realloc(nombre,15*sizeof(char)); //reasigno 5 bytes
      printf("%s\n",nombre);
      free(nombre2);

    }
    free(nombre);


   return 0;
}


CitarSegunda duda, seria posible hacer la idea?