[C con Clase] ayuda con programa

Davidson, Steven srd4121 en njit.edu
Mie Abr 17 22:57:51 CEST 2013


Hola Fanatidark,

2013/4/17 fanatidark <pandoras_box_789 en hotmail.com>

> la idea era realizar un ejercicio de esta pagina sobre punteros que usa
> una funcion para medir la longitus de una palabra mi codigo es el siguente:
>
>
Veamos el código fuente.

#include <iostream>
> #include <stdlib.h>
> #include <stdio.h>
>

Deberías usar los nombres estándares:

<cstdlib>
<cstdio>

#include <conio.h>
>
>
Este fichero de cabecera ni su biblioteca son estándares.

using namespace std;
>
> char cadena[100];
> char *p1, *p2;
>

No recomiendo usar variables globales, especialmente si estás aprendiendo a
programar. Existen demasiados peligros como para justificar su uso.

int loncadena (char a, char b)
> {
>         return ((a)-(b));
> }
>
>
Esto realmente no realiza la función que quieres, porque simplemente restas
caracteres, que implica la resta de sus códigos ASCII.

int main()
> {
>         cout<<"ingrese alguna palabra"<<endl;
>     cin>> cadena;
>     p1=cadena;
>     p2=cadena;
>     while(*p2!=0)
>     {
>                 p2++;
>         }
>         cout<< p2-p1<< endl;
>         cin.get();
> }
>

Recuerda que 'main()' debe retornar un entero, que por convenio es 0
(cero), para indicar que el programa ha terminado con éxito.


>
> mi duda es la siguiente por que si pongo cout<<loncadena(p2, p1)me salta
> error en el copilador???
>
>
El problema es que los tipos de los parámetros que pasas a la hora de
invocar 'loncadena()' NO son los mismos tipos que en su prototipo. En tu
caso, intentas pasar punteros (char *) cuando la función espera recibir
caracteres (char). Recuerda que C++ es un lenguaje FUERTEMENTE tipificado.
Esto significa que el lenguaje (y el compilador) siempre verifica los tipos
de los datos y prototipos para poder evaluar expresiones.

y como le puedo hacer para que si no ay nada escrito me salga un mensaje
> diciendome que no escribi nada???
>
>
>
Si no se ha escrito nada, entonces el array, 'cadena', contendrá el
carácter nulo, '\0', en su primer elemento; es decir,

cadena[0] == '\0'

ya intente poniendo
> if(*p1==null)
>

En primer lugar, 'null' no existe en C/C++. Sí existe la constante
simbólica 'NULL', que se define en varios ficheros estándares de cabecera.
Sin embargo, esta constante sirve para representar un puntero nulo, y no un
carácter nulo: código ASCII 0 (cero). Por lo tanto, te interesa hacer la
comprobación anterior:

if( *p1 == '\0' ) {...}

Recuerda, C++ es un lenguaje FUERTEMENTE tipificado. Va a comprobar los
tipos constantemente; si no coinciden, entonces seguramente aparecerá un
mensaje de error.


Espero que esto te oriente.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130417/8a76a8cc/attachment.html>


Más información sobre la lista de distribución Cconclase