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)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en programa de punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en programa de punteros  (Leído 2,994 veces)
Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Error en programa de punteros
« en: 22 Mayo 2013, 13:20 pm »

Hola a todos ( de nuevo ), siento tener que preguntar demasiadas cosas pero espero que tengan paciencia con este novato  :-[
El problema es el siguiente, tengo que hacer el siguiente ejercicio para el manual que me estoy leyendo:

Escribir un programa con una funcion que calcule la longitud de una cadena de caracteres. El nombre de la funcion sera LongitudCadena, debe devolver un "int", y como parametros de entrada debe tener un puntero a "char". (En "main" probar con distintos tipos de cadenas:arrays y punteros. )<--- Esto no lo pillo xd.

 Ahora mismo llevo esto pero no me sale, agradeceria ayuda porque la verdad lo de los punteros me esta resultando bastante dificil   :-(

No estoy pidiendo que me manden el codigo del programa entero!!! (que sino no aprendo xd), sino que me digan mi error y si es posible un ejemplo de bien usado, pero en un miniejemplo no el programa.

Muchas gracias por adelantado ;)
PD: EN EL CODIGO DONDE PONE &#241; ES UNA --->Ñ<--- QUE EL C++ NO ME LEE XD
Código
  1.  
  2. #include <iostream>
  3. using namespace std;
  4. bool LongitudCadena(char* cadena);
  5. int main() {
  6.    char cadena[100];
  7.    char resp[4];
  8.     char c;
  9.     cadena=c;
  10.    do{
  11.         cout << endl << endl;
  12.         cout << "Introduce la cadena de la que desees saber su tamaño:" << endl<< endl;
  13.         cin >> cadena ;cout << endl << endl; cin.get();
  14.         cout << "Tamaño de la cadena: "  << c <<endl<<endl;
  15.         system("PAUSE");
  16.         cout << "Desea reiniciar a otra cadena: "; cin >> resp;cin.get();
  17.  
  18.    }
  19.      while(resp[0]==('s'|| 'S' || 'y' || 'Y'));
  20.  
  21.    cin.get();
  22.    return 0;
  23. }
  24. bool LongitudCadena(char* n){
  25.     for (i=0;i<100;i++)
  26.     do (sizeof(cadena[i])); while( cin.get());
  27.     }
  28.  

Algo me tiene que fallar en el puntero, no se si es la declaracion o que exactamente pero algo me falla...  :huh:
Gracias de nuevo ;)


En línea

Si se puede imaginar, se puede programar.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error en programa de punteros
« Respuesta #1 en: 22 Mayo 2013, 13:31 pm »

Buen post, te ha faltado decir que error te da  :silbar:

De momento veo algunos fallos:

Código
  1. char cadena[100];
  2. char resp[4];
  3. char c;
  4. cadena=c;

¿Que pretendías hacer en la última línea? Estas asignando un puntero a una variable que ni siquiera has inicializado... Los efectos son impresivibles, borrala.

Código
  1. cout << "Tamaño de la cadena: "  << c <<endl<<endl;
c no es la función sino la variable que has declarado antes. Ahí deberías poner LongitudCadena(cadena)

Código
  1. bool LongitudCadena(char* n){
  2.    for (i=0;i<100;i++)
  3.    do (sizeof(cadena[i])); while( cin.get());
  4.    }

Una funcion que obtiene la longitud de la cadena pero devuelve un bool? (bueno en teoría devuelve bool pero no has puesto ningún return). ¿Y a santo de que va el cin.get()? Además la cadena las has llamado ahí n.

El ultimo byte de una cadena se simboliza con un caracter nulo '\0'. Para calcular el tamaño de una cadena tienes que ir comprobando hasta llegar al caracter nulo:

Código
  1. int LongitudCadena(char* n){
  2.   int Tamanyo = 0;
  3.  
  4.   while (n[tamanyo] != '\0')
  5.   {
  6.    Tamanyo++;
  7.   }
  8.  
  9.   return Tamanyo; // Devolver el tamanyo
  10. }
     


« Última modificación: 22 Mayo 2013, 13:32 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Re: Error en programa de punteros
« Respuesta #2 en: 22 Mayo 2013, 14:12 pm »

Vale he efectuado los cambios y este es el resultado:
Código
  1. #include <iostream>
  2. using namespace std;
  3. int LongitudCadena(char* cadena){
  4.    int tamanyo = 0;
  5.  
  6.    while (cadena[tamanyo] != '\0')
  7.    {
  8.          tamanyo++;
  9.    }
  10.    return tamanyo;
  11. }
  12.  
  13.  
  14. int main() {
  15.    char cadena[100];
  16.    char resp[4];
  17.     char c;
  18.    Bucle:
  19.  
  20.         cout << endl << endl;
  21.         cout << "Introduce la cadena de la que desees saber su tamanyo:" << endl<< endl;
  22.         cin >> cadena ;cout << endl << endl; cin.get();
  23.         cout << "Tamanyo de la cadena: "  << LongitudCadena(cadena) <<endl<<endl;cin.get();
  24.         cout << "Desea hacer a otra cadena: "; cin >> resp ;cin.get();
  25.  
  26.  
  27.      if(resp[0]=='s'||resp[0]== 'S' ||resp[0]== 'y' ||resp[0]== 'Y') goto Bucle; cin.get();
  28.  
  29.    cin.get();
  30.    return 0;
  31. }
  32.  

Pero lo malo es que si introduzco mas de una palabra solo me dice el tamaño de la primera y no del conjunto; supongo que por esta parte :
Código
  1. while (cadena[tamanyo] != '\0')
Ya que en cuanto hay un conjunto vacio deja de leer, ¿cómo podria hacer que lea mas palabras sin que cuente los espacios, es decir podria por ejemplo hacer que si lee dos conjuntos vacios (en vez de uno) deje de leer? Y de ser asi, como lo conseguiria???
Muchas gracias por tu ayuda amchacon me ha servido  :D
PD: YA SE QUE NO ES RECOMENDABLE USAR GOTO, PERO AL SER UN PROGRAMA FACIL NO CREO QUE DE PROBLEMAS AL COMPILADOR XD
« Última modificación: 22 Mayo 2013, 14:14 pm por superkorlas » En línea

Si se puede imaginar, se puede programar.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error en programa de punteros
« Respuesta #3 en: 22 Mayo 2013, 14:51 pm »

No, el caracter nulo '\0' no es lo mismo que los espacios ' '

El problema es del cin que corta cuando pilla un espacio. Si quieres coger una linea entera:

Código
  1. cin.getline(cadena,100);
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error en programa de punteros
« Respuesta #4 en: 22 Mayo 2013, 16:10 pm »

Vale he efectuado los cambios y este es el resultado:
Citar
................................................................................   
      if(resp[0]=='s'||resp[0]== 'S' ||resp[0]== 'y' ||resp[0]== 'Y') goto Bucle; cin.get();
    
    cin.get();
    return 0;
}
................................................................
 YA SE QUE NO ES RECOMENDABLE USAR GOTO, PERO AL SER UN PROGRAMA FACIL NO CREO QUE DE PROBLEMAS AL COMPILADOR XD

¿Y por qué no lo dejas con el do while que tenías originalmente y que tan bien funcionaba?. Ahora, por ejemplo,  tienes un "cin.get();" después de bucle que nunca se va a ejecutar ¡ ¡ ¡ ¡ ¡ y eso que el programa es cortito.

Te dejo otra opción para la función Longitud, como simple práctica/ curiosidad:

Código
  1. int LongitudCadena(char* n){
  2.    int i;
  3.    for ( i=0;n[i] != '\0';i++);
  4.    return i; // Devolver el tamanyo
  5. }

Saluditos!. .... ..
En línea

Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Re: Error en programa de punteros
« Respuesta #5 en: 22 Mayo 2013, 19:56 pm »

Vale he metido lo de cin.getline(cadena,100) pero ahora me da un numero mas raro y sin sentido ( en el tamaño), por ejemplo si pongo como cadena "hola amigo" me devuelve 6 de tamaño... :huh: me tiene perplejo no se...
Aqui va el codigo como lo tengo actualmente por si es que lo he metido mal o algo.
PD: GRACIAS POR SU PACIENCIA Y SU AYUDA  :rolleyes:

Código
  1. #include <iostream>
  2. using namespace std;
  3. int LongitudCadena(char* cadena){
  4.    int tamanyo = 0;
  5.  
  6.    while (cadena[tamanyo] != '\0')
  7.    {
  8.          tamanyo++;
  9.    }
  10.    return tamanyo;
  11. }
  12.  
  13.  
  14. int main() {
  15.    char cadena[100];
  16.    char resp[4];
  17.     char c;
  18.    do{
  19.  
  20.         cout << endl << endl;
  21.         cout << "Introduce la cadena de la que desees saber su tamanyo:" << endl<< endl;
  22.         cin >> cadena ;cout << endl << endl; cin.getline(cadena,100);
  23.         cout << "Tamanyo de la cadena: "  << LongitudCadena(cadena) <<endl<<endl;cin.get();
  24.         cout << "Desea hacer a otra cadena: "; cin >> resp ;cin.get();
  25.         }
  26.  
  27.      while(resp[0]=='s'||resp[0]== 'S' ||resp[0]== 'y' ||resp[0]== 'Y') ;
  28.  
  29.    cin.get();
  30.    return 0;
  31. }
« Última modificación: 22 Mayo 2013, 22:59 pm por superkorlas » En línea

Si se puede imaginar, se puede programar.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error en programa de punteros
« Respuesta #6 en: 24 Mayo 2013, 10:42 am »

No has quitado el antiguo cin  :silbar:
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error en programa de punteros
« Respuesta #7 en: 24 Mayo 2013, 11:24 am »

Vale he metido lo de cin.getline(cadena,100) pero ahora me da un numero mas raro y sin sentido ( en el tamaño), por ejemplo si pongo como cadena "hola amigo" me devuelve 6 de tamaño... :huh: me tiene perplejo no se...


¿Y qué querías que te devolviera?. Si lo observas con atención el primer cin "pilla" todos los caracteres "hasta" que encuentra un espacio en blanco, es decir la palabra" hola". Lo demás que queda en el buffer "_amigo" son seis caracteres que cin.get "vuelve" a meter como variable cadena y ese es el resultado que devuelve la función que calcula la longitud. Así de sencilla es la explicación de ese número que te tenía perplejo.

Saluditos! ....


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Errores con programa (punteros)
Programación C/C++
jamatbar 0 1,543 Último mensaje 10 Diciembre 2011, 18:59 pm
por jamatbar
Duda con punteros (error programa)
Programación C/C++
apoeti 7 3,609 Último mensaje 12 Agosto 2012, 01:19 am
por rir3760
[Ayuda] Programa con Punteros en C
Programación C/C++
jack09 7 3,531 Último mensaje 20 Enero 2013, 02:01 am
por BatchianoISpyxolo
programa punteros c
Programación C/C++
chicainge 2 1,751 Último mensaje 6 Marzo 2015, 03:01 am
por rir3760
No encuentro el error en este programa - Structs + Punteros
Programación C/C++
palacio29 2 1,935 Último mensaje 18 Mayo 2019, 22:23 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines