[C con Clase] porque no me copila???

Davidson, Steven srd4121 en njit.edu
Lun Abr 22 03:40:42 CEST 2013


Hola Fantidark,

En el correo-e anterior, te comentaba que no puedes meter una función
dentro de otra. Otro error que tenías era acerca del bucle 'while', tanto
la condición que escribiste: o=0 cuando debería ser o==0, como la falta de
la posibilidad de cambiar el valor de 'o', para que la condición falle.

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

> entonces queda algo asi???(pero tadavia no busca bien siempre me dice que
> el caracter esta en la pocicion 1 por q???
>

Veamos el código fuente.

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

Puedes eliminar estas tres últimas inclusiones; es deicr, quédate con:

#include <iostream>

using namespace std;
>
> char oracion[65];
>
>
Como te dije antes, no te acostumbres a usar variables globales; no las
necesitas.

int busqueda(char *a,int b,char c)
>     {
>                 a=&oracion[0];
>

Esto no es necesario, ya que para eso mismo sirve pasar los parámetros por
copia: para copiar los parámetros.

                b=0;
>

No tiene sentido pasar 'b', ya que vas a cambiar su valor. Por lo tanto,
define 'b' localmente y elimina este segundo parámetro de la función. Esto
es,

int busqueda( char *szCadena, char cClave )

                while((b<65)&&((*a)!=c))
>                 {
>                         b++;
>                         a++;
>                 }
>                 return b;
>
>     }
>
> int main()
> {
>
>         char *p,*p2;
>

No necesitas estos punteros.

        int n,o;
>         char l;
>
>         cout<<"escribe una oracion"<<endl;
>         cin>>oracion;
>         cout<<"quieres buscar algun caracter?"<<endl;
>         cout<<"\n si=0 \n no=1"<<endl;
>
>         cin>>o;
>         if(o==0)
>         {
>         while(o==0)
>

No necesitas hacer un 'if' y luego un 'while', ya que en este caso vamos a
comprobar ambas condiciones. Date cuenta que un bucle 'while' es
básicamente un 'if' pero con iteraciones (repeticiones).

        {
>                 cout<<"que caracter quieres buscar?"<<endl;
>                 cin>>l;
>                 n=0;
>                 busqueda (p, n ,l);
>

Con acorde a lo que dije previamente, no necesitas pasar 'n', ni tampoco
tener tres parámetros.

También date cuenta que esta función retornará un entero, por lo que
deberíamos guardar tal valor retornado en alguna variable. Ésta es la razón
del problema que comentas: no haces nada con el resultado retornado.

                if(n<65)
>                 {
>                         cout<<"\n su caracter es:  "<<l <<" y esta en la
> pocicion: "<<busqueda<<endl;
>                 }
>                 else
>                 {
>                         cout<< "no existe ese caracter en esta
> cadena"<<endl;
>                 }
>                 cout<<"quieres seguir buscando?"<<endl;
>                 cout<<"\n si=0 \n no=1"<<endl;
>                 cin>>o;
>
>     }
>     }
>         else
>         {
>                 cout<<"adios"<<endl;
>         }
>
>
Este apartado de 'else' sólo se ejecutará la primera vez que el usuario
elija "no"; o sea, '1'. Para posteriores preguntas, no habrá mensaje al
finalizar el bucle.

return 0;
>
> }
>


Espero que esto te aclare las dudas.

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


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