Autor
|
Tema: Error en programa de punteros (Leído 2,962 veces)
|
Error 404:
Desconectado
Mensajes: 58
|
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 ñ ES UNA --->Ñ<--- QUE EL C++ NO ME LEE XD #include <iostream> using namespace std; bool LongitudCadena(char* cadena); int main() { char cadena[100]; char resp[4]; char c; cadena=c; do{ cout << endl << endl; cout << "Introduce la cadena de la que desees saber su tamaño:" << endl<< endl; cin >> cadena ;cout << endl << endl; cin.get(); cout << "Tamaño de la cadena: " << c <<endl<<endl; system("PAUSE"); cout << "Desea reiniciar a otra cadena: "; cin >> resp;cin.get(); } while(resp[0]==('s'|| 'S' || 'y' || 'Y')); cin.get(); return 0; } bool LongitudCadena(char* n){ for (i=0;i<100;i++) do (sizeof(cadena[i])); while( cin.get()); }
Algo me tiene que fallar en el puntero, no se si es la declaracion o que exactamente pero algo me falla... Gracias de nuevo
|
|
|
En línea
|
Si se puede imaginar, se puede programar.
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Buen post, te ha faltado decir que error te da De momento veo algunos fallos: char cadena[100]; char resp[4]; char c; 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. 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) bool LongitudCadena(char* n){ for (i=0;i<100;i++) do (sizeof(cadena[i])); while( cin.get()); }
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: int LongitudCadena(char* n){ int Tamanyo = 0; while (n[tamanyo] != '\0') { Tamanyo++; } return Tamanyo; // Devolver el tamanyo }
|
|
« Última modificación: 22 Mayo 2013, 13:32 pm por amchacon »
|
En línea
|
|
|
|
Error 404:
Desconectado
Mensajes: 58
|
Vale he efectuado los cambios y este es el resultado: #include <iostream> using namespace std; int LongitudCadena(char* cadena){ int tamanyo = 0; while (cadena[tamanyo] != '\0') { tamanyo++; } return tamanyo; } int main() { char cadena[100]; char resp[4]; char c; Bucle: cout << endl << endl; cout << "Introduce la cadena de la que desees saber su tamanyo:" << endl<< endl; cin >> cadena ;cout << endl << endl; cin.get(); cout << "Tamanyo de la cadena: " << LongitudCadena(cadena) <<endl<<endl;cin.get(); cout << "Desea hacer a otra cadena: "; cin >> resp ;cin.get(); if(resp[0]=='s'||resp[0]== 'S' ||resp[0]== 'y' ||resp[0]== 'Y') goto Bucle; cin.get(); cin.get(); return 0; }
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 : 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 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
Mensajes: 1.211
|
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: cin.getline(cadena,100);
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Vale he efectuado los cambios y este es el resultado: ................................................................................ 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:
int LongitudCadena(char* n){ int i; for ( i=0;n[i] != '\0';i++); return i; // Devolver el tamanyo }
Saluditos!. .... ..
|
|
|
En línea
|
|
|
|
Error 404:
Desconectado
Mensajes: 58
|
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... 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 #include <iostream> using namespace std; int LongitudCadena(char* cadena){ int tamanyo = 0; while (cadena[tamanyo] != '\0') { tamanyo++; } return tamanyo; } int main() { char cadena[100]; char resp[4]; char c; do{ cout << endl << endl; cout << "Introduce la cadena de la que desees saber su tamanyo:" << endl<< endl; cin >> cadena ;cout << endl << endl; cin.getline(cadena,100); cout << "Tamanyo de la cadena: " << LongitudCadena(cadena) <<endl<<endl;cin.get(); cout << "Desea hacer a otra cadena: "; cin >> resp ;cin.get(); } while(resp[0]=='s'||resp[0]== 'S' ||resp[0]== 'y' ||resp[0]== 'Y') ; cin.get(); return 0; }
|
|
« Última modificación: 22 Mayo 2013, 22:59 pm por superkorlas »
|
En línea
|
Si se puede imaginar, se puede programar.
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Errores con programa (punteros)
Programación C/C++
|
jamatbar
|
0
|
1,518
|
10 Diciembre 2011, 18:59 pm
por jamatbar
|
|
|
Duda con punteros (error programa)
Programación C/C++
|
apoeti
|
7
|
3,537
|
12 Agosto 2012, 01:19 am
por rir3760
|
|
|
[Ayuda] Programa con Punteros en C
Programación C/C++
|
jack09
|
7
|
3,472
|
20 Enero 2013, 02:01 am
por BatchianoISpyxolo
|
|
|
programa punteros c
Programación C/C++
|
chicainge
|
2
|
1,719
|
6 Marzo 2015, 03:01 am
por rir3760
|
|
|
No encuentro el error en este programa - Structs + Punteros
Programación C/C++
|
palacio29
|
2
|
1,898
|
18 Mayo 2019, 22:23 pm
por MAFUS
|
|