Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - ſeptiembre 07, 2008, 05:58:57
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: Primer Programa en C [A ver si me podeis ayudar a solucionar una duda...] 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Primer Programa en C [A ver si me podeis ayudar a solucionar una duda...]  (Leído 286 veces)
tkows
Habitual
*****
Desconectado Desconectado

Mensajes: 183


tkows@hotmail.com
Ver Perfil Email
« en: Junio 06, 2007, 03:52:41 »

Código:
#include <stdio.h>
#include <string.h>

int main(){
    char text[101];
    int palab=0;
    int letra=0;
    int spac=0;
    char *punt;
    punt=text;
    printf("\nEscribe una frase/palabra(Maximo 100 letras):\n");
    printf("\n");
    fflush(stdout);
    gets(text);
    while (*punt!='\0'){
          if (*punt==' ') {
                       palab++;
                       spac++;
                       }
          else letra++;
          punt++;
    }
    if (*punt=='\0'){
                   palab++;
                   printf("\nLa frase/palabra tiene %i letras, %i palabras y %i espacios.\n", letra, palab, spac);
                   }

}
Es un code muy simple ya que apenas acabo de iniciarme...

El programa funciona perfecto y eso pero lo que quiero es saber como puedo definir la string para que acepte valores "infinitos" por asi decirlo, es decir, dejar el array vacio, para introducir una cantidad indefinida de caracteres...
he probado con:
Código:
char text[];
pero me da error el compilador :S

Como podria solucionarlo?

Saludos!
Gracias!
En línea
ven0m
Colaborador
*****
Desconectado Desconectado

Mensajes: 781


Christina...Eat me, drink me...

x_0@hotmail.de
Ver Perfil Email
« Respuesta #1 en: Junio 11, 2007, 12:24:05 »

Buenas tyko : mira al momento de compilar tu codigo  la Linea 14 me da errores... yo he cambiado el codigo

por

gets(texto);   a
getchar();
y me compila sin errores...

tu quieres que el programa vuelva siempre a ldonde dice

Escriba una Frase / maximo 100 letras???

y bueno hehe he probado el programa y siempre escribe el mismo resultado..
eso de que acepte valores infinitos lo estoy probando ahora...
y para que es el while?
s

PS: Una pregunta a los que saben mas.. el quiere que el string obtenga valores infinitos.. no se podria incrementar eso con un for???
osea cada vez que el usuario escriba una palabra el espacio se incremente?

salud0s
« Última modificación: Junio 11, 2007, 01:03:24 por k0ukl0S » En línea

R-E-S-P-E-C-T, find out what it means to me


Christina..Christina..Brak mi ciebie moj EMO-Princesa..BARDZO CIE KOCHAM!!!
dreams_eater
Habitual
*****
Desconectado Desconectado

Mensajes: 176



Ver Perfil
« Respuesta #2 en: ſeptiembre 16, 2007, 10:18:34 »

Te lo esplico de esta forma
Hay variables globales y locales (ellas son finitas, es decir se crean y se destruyen en forma finita)
No se puede crear variables infinitas.
Pero si se puede lograr la sensacion de ello con algo llamado asignación dinamica (que seia pedirle al sistema operativo memoria en tiempo de ejecución).
No se metan (aun) en asignacion dinamica, primero aprendan a manejar decentemente el ingreso de strings, scanf(), cin>>,getline.cin>>.
luego recorran el string, traten de hacer ustedes mismos strcpy(), strcat() y strcmp().
y luego aprendan punteros
Y finalmente "dynamic allocation".
En línea



"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
dark confundido
Habitual
*****
Desconectado Desconectado

Mensajes: 177


Maestro Troyano


Ver Perfil WWW
« Respuesta #3 en: ſeptiembre 17, 2007, 07:24:24 »

infinito no se puede por que no tienes memoria infinita XD perp podrias hacer esto

char *texto;

texto=calloc(1,sizeof(char));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
esto es igual a esto texto[1] pero le puedes seguir aumentando el tamaño

ahora veremos como hacer para tener mas tamaña

char *temp;
temp=realloc(texto,sizeof(texto)+1);

ahora temp va a tener el tamaño de texto+1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   


En línea

DarkIker
Habitual
*****
Desconectado Desconectado

Mensajes: 263


Colombia Underground Team

dark_iker_reign@hotmail.com
Ver Perfil WWW Email
« Respuesta #4 en: ſeptiembre 17, 2007, 01:10:43 »

So bad, joder tio que texto es un puntero y sizeof no es capaz de tomar el tamaño de un puntero   Embarrassed, asi que no tomara el tamaño de texto +1 si no el tamaño de un puntero( 4 ) + 1  Embarrassed Embarrassed.

Att: DarkIker
En línea


Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion --> Colombia Underground Team

Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion --> My Blog
tkows
Habitual
*****
Desconectado Desconectado

Mensajes: 183


tkows@hotmail.com
Ver Perfil Email
« Respuesta #5 en: ſeptiembre 17, 2007, 02:03:56 »

Hola!

Bueno, gracias a todos por responder y ayudarme Cheesy. Gracias dreams eater por la explicación!

Por cierto ven0m lo del while es para comparar si el caracter es: \0 (el que indica que finaliza la string) y utilizo el while para recorrer el array Wink

Gracias y...

printf("Saludos"); /* XDDD */
En línea
dark confundido
Habitual
*****
Desconectado Desconectado

Mensajes: 177


Maestro Troyano


Ver Perfil WWW
« Respuesta #6 en: ſeptiembre 17, 2007, 02:05:28 »

So bad, joder tio que texto es un puntero y sizeof no es capaz de tomar el tamaño de un puntero   Embarrassed, asi que no tomara el tamaño de texto +1 si no el tamaño de un puntero( 4 ) + 1  Embarrassed Embarrassed.

Att: DarkIker

 Tongue gracias por corregir ni me habia dado cuenta cabe recalcar que acababa de llegar del trabajo a esa hora o sea estaba con mucho sueño por que trabajo de noche  Cheesy Cheesy Cheesy Cheesy Cheesy


char *texto;
char *temp;
texto=calloc(1,sizeof(char));
temp=realloc(texto,2);

temp queda como si fuera esto temp[3]  Tongue

PD: la proxima vez llegare directo a la cama Grin y no al internet  Roll Eyes
En línea

DarkIker
Habitual
*****
Desconectado Desconectado

Mensajes: 263


Colombia Underground Team

dark_iker_reign@hotmail.com
Ver Perfil WWW Email
« Respuesta #7 en: ſeptiembre 17, 2007, 02:41:47 »

hmmm quda como 2 tio, temp[2].

Att: DarkIker
En línea


Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion --> Colombia Underground Team

Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion --> My Blog
Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1365


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #8 en: ſeptiembre 17, 2007, 03:41:11 »

hola, aver... la funcion gets(texto); esta mal, creo que es texto = gets();

eso es un error que tenes, ahora la memoria infinita creo que en C no se puede, eso lei

salu2
En línea

Inside The Source Code




Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion
Linux Registred User #460377
FreakMind
Habitual
*****
Conectado Conectado

Mensajes: 181



Ver Perfil
« Respuesta #9 en: ſeptiembre 17, 2007, 04:31:31 »

Buenas

Pequeños comentarios....

1) El prototipo de gets es char *gets(char *cadena); . Sin embargo, gets tiene problemas con el overflow, por lo que recomendaria que usen fgets

2) En ningun lenguaje se puede tener memoria infinita... simplemente porque las memorias tienen un limite... La computadora simula tener mas memoria (pero no infinita) de la que en verdad tiene con la memoria virtual (swappear procesos a disco)

3) Hacer un realloc cada 1 caracter me parece algo ilogico. Se perdera mas tiempo haciendo llamadas al SO pidiendo por mas memoria que otra cosa. Yo lo que haria es algo asi (no implica que sea lo mejor)

Código:
#define SIZE 1024

int main(void)
{
    char        buffer[SIZE], *str = NULL;
    int           count = 0;
   
    while( /* alguna condicion */){
        fgets(buffer, SIZE, stdin);
        /* hacer algo quizas */
        str = realloc(str, sizeof(char) * (count + strlen(buffer) + 1));
        memcpy(str + count, strlen(buffer), buffer);
        str[count += strlen(buffer)] = '\0';
        memset(buffer, 0, SIZE);
        /* hacer otra cosa quizas */
    }

    return 0;
}

PD: No esta probado ni nada... asi que estan avisados

Salu2, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: Primer Programa en C [A ver si me podeis ayudar a solucionar una duda...] « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC