Programación General > C/C++

 Como arreglo este código?

<< < (2/3) > >>

Eternal Idol:
Si, busca documentacion cuando tengas dudas:
http://www.cplusplus.com/reference/clib ... ng/strncpy.

Podes usar strcmp, hay un ejemplo en mi anterior mensaje.

bermann:
Tienes razón y no me había dado cuenta, gracias por la web no la conocía, de ahora en adelante cuando tenga dudas de documentación buscare ahí para no molestar aquí. Muchas gracias por la ayuda, ojalá pueda devovlerla.

OFFTOPIC: El foro esta buenisimo, me gusto mucho, felicitaciones ;)

Eternal Idol:
De nadas  B)

bermann:
Uff, yo denuevo y por lo mismo, este código salio duro, mira, finalmente con todo lo que me dijiste quedo así, pero me sigue lanzando unos errores de variables en la función main.

--- Código: C++ ---#include <iostream>#include <cstring>using namespace std; struct Persona{    char Nombre[20];    char Fono[9];        char GetName(){        return *Nombre;    }        char GetFone(){        return *Fono;    }        void SaveName(char *n){        strncpy(Nombre, n, sizeof(Nombre) - 1);    }        void SaveFone(char *t){        strncpy(Fono, t, sizeof(Fono) - 1);    }}; int main(){    Persona personas[20];    char opc, fono[9], nombre[20];    int npersona=0;        do {        cout << "Eliga que hacer" << endl        // Esto es el Menu             << "a) Ingresar una Persona" << endl             << "b) Buscar por nombre" << endl             << "c) Buscar por telefono" << endl             << "d) Salir" << endl;        cin >> opc;                switch(opc) {            case 'a': cout << "Ha elegido Ingresar una Persona" << endl  // Ingresar una persona                           << "Nombre: ";                      cin >> nombre;                      personas[npersona].SaveName(nombre); //Guardamos el nombre                                            cout << "Teléfono: ";                      cin >> fono;                      personas[npersona].SaveFone(fono); //Guardamos el Teléfono                                            npersona++; //Aumentamos el numero de npersona para no sobreescribir datos                      break;                                  case 'b': if(!npersona){  // Busca por nombre y si no hay personas guardadas manda error                          cout << "Error, no hay personas" << endl;                          break;                      }                      cout << "Ingrese un nombre a buscar: " << endl;                      cin >> nombre;                      for(int i=0; i<npersona; i++){   // Buscamos si algun nombre calza                          if(!strcmp(personas[i].GetName(), nombre)) {                              cout << "Nombre encontrado" << endl                                   << "Nombre: " << personas[i].GetName << endl                                   << "Teléfono: " << personas[i].GetFone << endl << endl;                          }                          else {                              cout << "Nombre no encontrado" << endl;                          }                      }                      break;            case 'c': if(!npersona){   // Busca por telefono y si no hay personas guardadas manda error                          cout << "Error, no hay personas" << endl;                          break;                      }                      cout << "Ingrese un teléfono a buscar: " << endl;                      cin >> fono;                      for(int i=0; i<npersona; i++){  // Buscamos si algun telefono calza                          if(!strcmp(personas[i].GetFone(), fono)) {                              cout << "Teléfono encontrado encontrado" << endl                                   << "Nombre: " << personas[i].GetName << endl                                   << "Teléfono: " << personas[i].GetFone << endl << endl;                          }                          else {                              cout << "Teléfono no encontrado" << endl;                          }                      }                      break;            case 'd': opc = '0';                      break;            default: opc = '1';                     break;        }    }while(opc != '0');    return 0;}             
Los errores son, y la verdad que no los entiendo.:

--- Citar ---g++ -Wall -c "ejercicio.cpp" (en directorio: ---------------------)
ejercicio.cpp: In function ‘int main()’:
La compilación falló.
ejercicio.cpp:59: error: conversión inválida de ‘char’ a ‘const char*’
ejercicio.cpp:59: error:   argumento de inicialización 1 de ‘int strcmp(const char*, const char*)’
ejercicio.cpp:61: error: no match para ‘operator<<’ en ‘std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)((std::basic_ostream<char, std::char_traits<char> >*)((std::basic_ostream<char, std::char_traits<char> >*)std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)(& std::cout)), ((const char*)"Nombre encontrado")))->std::basic_ostream<_CharT, _Traits>::operator<< [with _CharT = char, _Traits = std::char_traits<char>](std::endl [with _CharT = char, _Traits = std::char_traits<char>]))), ((const char*)"Nombre: ")) << personas.Persona::GetName’
/usr/include/c++/4.3/ostream:112: nota: los candidatos son: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:121: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:131: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:169: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:173: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:177: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/bits/ostream.tcc:97: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:184: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/bits/ostream.tcc:111: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:195: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:204: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:208: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:213: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:217: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:225: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:229: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(const void*) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/bits/ostream.tcc:125: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]
ejercicio.cpp:76: error: conversión inválida de ‘char’ a ‘const char*’
ejercicio.cpp:76: error:   argumento de inicialización 1 de ‘int strcmp(const char*, const char*)’
ejercicio.cpp:78: error: no match para ‘operator<<’ en ‘std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)((std::basic_ostream<char, std::char_traits<char> >*)((std::basic_ostream<char, std::char_traits<char> >*)std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)(& std::cout)), ((const char*)"Tel3777777770337777777651fono encontrado encontrado")))->std::basic_ostream<_CharT, _Traits>::operator<< [with _CharT = char, _Traits = std::char_traits<char>](std::endl [with _CharT = char, _Traits = std::char_traits<char>]))), ((const char*)"Nombre: ")) << personas.Persona::GetName’
/usr/include/c++/4.3/ostream:112: nota: los candidatos son: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:121: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:131: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:169: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:173: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:177: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/bits/ostream.tcc:97: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:184: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/bits/ostream.tcc:111: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:195: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:204: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:208: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:213: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:217: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:225: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/ostream:229: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(const void*) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/bits/ostream.tcc:125: nota:                     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]

--- Fin de la cita ---

Eternal Idol:
Mira el error:
ejercicio.cpp:59: error: conversión inválida de ‘char’ a ‘const char*’

strcmp compara cadenas y le estas pasando un caracter. Los Get con cadenas estaban bien antes, el tipo de retorno es char * (un char solo es un caracter nada, un puntero a char - char * - se usa para la direccion de comienzo de una cadena de caracteres). Asi van:


--- Código: C++ ---char* GetName(){  return Nombre;}char* GetFone(){  return Fono;} 
Esto ya te lo habia dicho en el mensaje anterior, estas lineas siguen mal (lo haces dos veces en el codigo):
<< "Nombre: " << personas.GetName << endl
<< "Teléfono: " << personas.GetFone << endl << endl;

Estas poniendo GetName y GetFone como si fueran propiedades y son metodos (funciones de la clase), tenes que llamarlos con ().

Con esos cambios compila.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa