elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Modulo distinguir letras de numeros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Modulo distinguir letras de numeros  (Leído 5,715 veces)
grandanh

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Modulo distinguir letras de numeros
« en: 14 Febrero 2014, 17:57 pm »

Hola, estoy haciendo un programa y le pido al usuario que ingrese un valor de tipo int. El problema es que si el usuario introduce una letra,  el programa no va. Me gustaría que me ayudarais a hacer un modulo que en el caso de que el usuario introduzca una letra le envíe un mensaje de error, pero que no vuelva a pedirle el int,

Gracias :D


En línea

Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: Modulo distinguir letras de numeros
« Respuesta #1 en: 14 Febrero 2014, 18:07 pm »

Hola grandanh, sería como una excepción... el manejo de excepciones en C no está implementado como en Java, puedes hacer módulo que verifique mediante una rutina if...  o con el operador ternario ? si es inválido el ingreso cierre la aplicación... en realidad dicho modulo lo implementaría con una rutina do ... while para forzar la ejecucción en un bucle hasta que el ingreso sea el correcto, pero no es lo que consultabas... Saludos.


En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Modulo distinguir letras de numeros
« Respuesta #2 en: 14 Febrero 2014, 18:13 pm »

estoy haciendo un programa y le pido al usuario que ingrese un valor de tipo int. El problema es que si el usuario introduce una letra,  el programa no va.
Lo primero que debes indicar es el lenguaje de programación que estas utilizando.

En el caso de C debes verificar el valor de retorno de la función de conversión (scanf/fscanf directamente o bien fgets + sscanf o strtol), en el caso de C++ puedes verificar el resultado de la operación "cin >> variable".

Y en ambos casos debe descartar la linea si esta no es valida (un bucle en C e ignore/sync en C++).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
grandanh

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Modulo distinguir letras de numeros
« Respuesta #3 en: 14 Febrero 2014, 18:18 pm »

Creía que el foro era solo de C++, fallo mío.

Dices que puedo verificar el resultado, pero como lo verificaría para diferencia de letras o numero/s?

gracias.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Modulo distinguir letras de numeros
« Respuesta #4 en: 14 Febrero 2014, 18:23 pm »

Un ejemplo sencillo:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. int main()
  7. {
  8.   cout << "Introduce un numero: ";
  9.  
  10.   int num;
  11.   if (cin >> num)
  12.      cout << "OK" << endl;
  13.   else
  14.      cout << "Entrada no valida" << endl;
  15.  
  16.   return 0;
  17. }

Pero le falta verificar si el resto de la linea solo es espacio blanco (para evitar que entradas como "123JKL" se tomen como validas).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: Modulo distinguir letras de numeros
« Respuesta #5 en: 14 Febrero 2014, 18:36 pm »

Aquí te dejo un ejemplo que he hecho, funciona solo con números de una cifra:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    char _numero = NULL;
  8.  
  9.    cout << "Introduce un numero: ";
  10.    cin >> _numero;
  11.  
  12.    int numero = (int)(_numero-0x30);
  13.  
  14.    if (numero < 0x0 || numero > 0x9)
  15.    {
  16.        cout << endl <<"Error, el digito intrucido no es un numero" << endl;
  17.  
  18.        return 1;
  19.    }
  20.  
  21.    cout << "El numero introducido es: " << numero << endl;
  22.    return 0;
  23. }
  24.  
En línea

Un byte a la izquierda.
grandanh

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Modulo distinguir letras de numeros
« Respuesta #6 en: 14 Febrero 2014, 18:42 pm »

Aquí te dejo un ejemplo que he hecho, funciona solo con números de una cifra:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    char _numero = NULL;
  8.  
  9.    cout << "Introduce un numero: ";
  10.    cin >> _numero;
  11.  
  12.    int numero = (int)(_numero-0x30);
  13.  
  14.    if (numero < 0x0 || numero > 0x9)
  15.    {
  16.        cout << endl <<"Error, el digito intrucido no es un numero" << endl;
  17.  
  18.        return 1;
  19.    }
  20.  
  21.    cout << "El numero introducido es: " << numero << endl;
  22.    return 0;
  23. }
  24.  

Gracias, pero necesitamos que funcione con números de más cifras.

Un ejemplo sencillo:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. int main()
  7. {
  8.   cout << "Introduce un numero: ";
  9.  
  10.   int num;
  11.   if (cin >> num)
  12.      cout << "OK" << endl;
  13.   else
  14.      cout << "Entrada no valida" << endl;
  15.  
  16.   return 0;
  17. }

Pero le falta verificar si el resto de la linea solo es espacio blanco (para evitar que entradas como "123JKL" se tomen como validas).

Un saludo

Ese módulo funciona a la perfección, pero cuando tratamos de llevarlo a nuestro código no funciona correctamente, aquí te dejo el módulo en cuestión:

Código:
void editSong(Collection &collection){
 
  int  buscado, encontrado, eleccion, cont=0, numero;
   
   for(unsigned int i=0;i<collection.songs.size();i++){
     printSong(collection.songs[i]);
   }
   
   cout<<"Select song:"<<endl;
   if(cin>>buscado){ //si es un numero tiene que hacer todo esto
      encontrado=findIdSong(collection, buscado);
      if(encontrado==-1){
cout<<"Error: Unknown song "<<buscado<<endl;
    }
    else{
      do{
  cout<<"Edit (1-Title, 2-Artist, 3-Album, 4-Genre, 5-Url):"<<endl;
  cin>>eleccion;
  cin.get();
  switch(eleccion){
    case 1:
      cout<<"Title: ";
      getline(cin, collection.songs[buscado-1].title);
      break;
    case 2:
      cout<<"Artist: ";
      getline(cin, collection.songs[buscado-1].artist);
      break;
    case 3:
      cout<<"Album: ";
      getline(cin, collection.songs[buscado-1].album);
      break;
    case 4:
      cout<<"Genre: ";
      getline(cin, collection.songs[buscado-1].genre);
      break;
    case 5:
      cout<<"Url: ";
      getline(cin, collection.songs[buscado-1].url);
      break;
    default: cout<<"Error: Unknow option"<<endl;
  }
  }while(eleccion!=1 && eleccion!=2 && eleccion!=3 && eleccion!=4 && eleccion!=5);
}
   }
   else{ //si no es un numero mostrar este mensaje de error y vovler a mostrar el menu (otro módulo)
     cout<<"No results"<<endl;
   }
}

Si quieres que te enseñe el código entero dímelo, pero es bastante mas largo.
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Modulo distinguir letras de numeros
« Respuesta #7 en: 14 Febrero 2014, 20:48 pm »


Creo que presuponer que si cin no es uno tiene que ser menos uno, no sé yo.

De todas formas tal como te apuntaba rir3760 el método tiene entre otros el inconveniente que si se introduce una cadena como 12as el cin toma el 12 como número.

Creo más seguro declarar otra variable buscado_char como char y comprobar en una función, más que nada para que sea más modular el código, que todos sus caracteres son numéricos. Esto se puede hacer con la función isdigit o a pelo:


Código
  1. /**********    FUNCION COMPRUEBA ENTERO   *************/
  2. int comprobar_cadena_como_numero (char cadena[100]){
  3.    for (int i=0;cadena[i];i++){
  4.      if (cadena[i]<'0' || cadena[i]>'9'){
  5.            return 1;
  6.        }
  7.    }
  8.    return 2;
  9. }
  10. /********************************************************/
  11.  ....................
  12.  cout<<"Select song:"<<endl;
  13.  char buscado_char[100];
  14.  cin>>buscado_char;
  15.  if (comprobar_cadena_como_numero(buscado_char)==2){
  16.    buscado=atoi(buscado_char);//si es un numero entero tiene que hacer todo esto
  17.    encontrado=findIdSong(collection, buscado);
  18.    }
  19.  else
  20.    cout<<"Error: Unknown song "<<buscado<<endl;
  21.  ........................................
  22.  

¡¡¡¡ Saluditos! ..... !!!!

:rolleyes: ;) ;) ;) :rolleyes:
En línea

Sefean

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Modulo distinguir letras de numeros
« Respuesta #8 en: 14 Febrero 2014, 22:54 pm »

Hola, soy el compañero de practicas del creador del tema, lo que pasa que ahora estoy solo por eso me he creado esta cuenta.

Hemos estado probando todo lo que nos habéis sugerido (y alguna que otra cosa mas) y no conseguimos hacer que funcione, así que tras probar mil cosas me he dado cuenta que al ejecutar este programilla:
Código:
#include <iostream>

using namespace std;

int main(){

int numero;

cout<<"Numero: "<<endl;
cin>>numero;
cout<<"N: "<<numero<<endl;

return 0;
}

Si en lugar de introducir un número introduces una letra, siempre recibes el valor 0, así que lo he intentado poner en mi código a ver si funcionaba, pero sigue fallando:

Código:
void editSong(Collection &collection){
  
  int encontrado, eleccion, buscado;  
  
   for(unsigned int i=0;i<collection.songs.size();i++){
     printSong(collection.songs[i]);
   }
  
   cout<<"Select song:"<<endl;
   cin>>buscado;
   if (buscado!=0){
   encontrado=findIdSong(collection, buscado);
   if(encontrado==-1){
cout<<"Error: Unknown song "<<buscado<<endl;
    }
    else{
      do{
 cout<<"Edit (1-Title, 2-Artist, 3-Album, 4-Genre, 5-Url):"<<endl;
 cin>>eleccion;
 cin.get();
 switch(eleccion){
   case 1:
     cout<<"Title: ";
     getline(cin, collection.songs[buscado-1].title);
     break;
   case 2:
     cout<<"Artist: ";
     getline(cin, collection.songs[buscado-1].artist);
     break;
   case 3:
     cout<<"Album: ";
     getline(cin, collection.songs[buscado-1].album);
     break;
   case 4:
     cout<<"Genre: ";
     getline(cin, collection.songs[buscado-1].genre);
     break;
   case 5:
     cout<<"Url: ";
     getline(cin, collection.songs[buscado-1].url);
     break;
   default: cout<<"Error: Unknow option"<<endl;
   break;
 }
 }while(eleccion!=1 && eleccion!=2 && eleccion!=3 && eleccion!=4 && eleccion!=5);
}
   }
   else{ //si no es un numero mostrar este mensaje de error y vovler a mostrar el menu
     cout<<"No results"<<endl;
   }
}

Aquí os dejo mi código entero por si a algún alma caritativa quiere echarle un ojo.

Código:
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

typedef struct
{
  int id; // El identificador de una nueva cancion debe ser igual a idNextSong
  string title;
  string artist;
  string album;
  string genre;
  string url;
} Song;

typedef struct
{
  vector<Song> songs;
  int idNextSong;  // Cada vez que se anyada una cancion a la coleccion, incrementar idNextSong
} Collection;


// Función para inicializar los valores de la colección
Collection createCollection();

//rellenar datos cancion
Song demandSong();

//comprobar cancion
bool isSongInCollection(const Collection &collection, Song song);

//añadir cancion
bool addSong(Collection &collection);

//imprimir canciones
void printSong(Song song);

//buscar y mostrar canciones
bool showCollection(const Collection &collection);

//encontrar ir
int findIdSong(const Collection &collection, int id);

//editar la cancion
void editSong(Collection &collection);

//borrar la cancion
void deleteSong(Collection &collection);

//prueba
bool Comprobarnumero(int numero);

// Implementar resto de funciones

int main()
{
  Collection collection=createCollection();
  
  
  char opcion;
  
    do{
      cout<<"--------------------------------"<<endl;
      cout<<"----------- MiniTunes ----------"<<endl;
      cout<<"--------------------------------"<<endl;
      cout<<"1- Add song"<<endl;
      cout<<"2- Edit song"<<endl;
      cout<<"3- Delete song"<<endl;
      cout<<"4- Show collection"<<endl;
      cout<<"5- Manage playlist"<<endl;
      cout<<"6- Import iTunes JSON data"<<endl;
      cout<<"7- Export playlist to XSPF"<<endl;
      cout<<"8- Save data"<<endl;
      cout<<"9- Load data"<<endl;
      cout<<"0- Play playlist"<<endl;
      cout<<"q- Quit"<<endl;
      cout<<"Option: ";
      cin>>opcion;
      cin.get();
  
      if (opcion!='1' && opcion!='2' && opcion!='3' && opcion!='4' && opcion!='5' && opcion!='6' && opcion!='7' && opcion!='8' && opcion!='9' && opcion!='0' && opcion!='q'){
cout<<"Error: Unknown option"<<endl;
      }    
      switch (opcion){
case '1':
 addSong(collection);
 break;
case '2': editSong(collection);
 break;
case '3':
 deleteSong(collection);
 break;
case '4':
 showCollection(collection);
 break;
      }
  }while(opcion!='q');
 
  return 0;
}

Collection createCollection()
{
  Collection collection;
  collection.idNextSong=1;

  return collection;
}

Song demandSong(){
  
  Song song;
  
  cout<<"Title: ";
  getline(cin, song.title);  
  cout<<"Artist: ";
  getline(cin, song.artist);
  cout<<"Album: ";
  getline(cin, song.album);
  cout<<"Genre: ";
  getline(cin,song.genre);
  cout<<"Url: ";
  getline(cin, song.url);
  
  
  return song;
}

bool isSongInCollection(const Collection &collection, Song song){
  
  bool repetida=false;
  unsigned int i;
  
  for(i=0;i<collection.songs.size() && !repetida;i++){
    if(song.title==collection.songs[i].title && collection.songs[i].artist==song.artist){
      repetida=true;
    }
  }
  return repetida;  
    
}

bool addSong(Collection &collection){

  bool repetida;
  
   Song song=demandSong();
  

   repetida=isSongInCollection(collection, song);
   if (repetida==true){
     cout<<"The song "<<song.title<<" is already in the collection"<<endl;
   }
   else {
  song.id=collection.idNextSong;
  collection.songs.push_back(song);
     collection.idNextSong++;
   }
return repetida;
}

void printSong(Song song){  
    cout<<song.id<<" | "<<song.title<<" | "<<song.artist<<" | "<<song.album<<" | "<<song.genre<<endl;      
}

bool showCollection(const Collection &collection){
  
  string buscado;
  bool encontrado;
  int aux=0;
  
  cout<<"Search: "<<endl;
  getline(cin, buscado);
  

    for(unsigned int i=0;i<collection.songs.size();i++){
    
      encontrado=false;
    
      if (collection.songs[i].title.find(buscado)!=string::npos){
encontrado=true;
      }
      else if(collection.songs[i].artist.find(buscado)!=string::npos){
encontrado=true;
      }
      else if(collection.songs[i].album.find(buscado)!=string::npos){
encontrado=true;
      }
      else if(collection.songs[i].genre.find(buscado)!=string::npos){
encontrado=true;
      }
      if (encontrado==true){
printSong(collection.songs[i]);
aux++;
}
    }
 
  if(aux==0){
    cout<<"No results"<<endl;
  }

 return encontrado;
}

int findIdSong(const Collection &collection, int id){
  
  int encontrado=-1;

  
   for(unsigned int k=0;k<=collection.songs.size();k++){
  if(id==collection.songs[k].id){
      encontrado=k+1;
      }
   }
  
    return encontrado;
}

void editSong(Collection &collection){
  
  int encontrado, eleccion, buscado;  
  
   for(unsigned int i=0;i<collection.songs.size();i++){
     printSong(collection.songs[i]);
   }
  
   cout<<"Select song:"<<endl;
   cin>>buscado;
   if (buscado!=0){
   encontrado=findIdSong(collection, buscado);
   if(encontrado==-1){
cout<<"Error: Unknown song "<<buscado<<endl;
    }
    else{
      do{
 cout<<"Edit (1-Title, 2-Artist, 3-Album, 4-Genre, 5-Url):"<<endl;
 cin>>eleccion;
 cin.get();
 switch(eleccion){
   case 1:
     cout<<"Title: ";
     getline(cin, collection.songs[buscado-1].title);
     break;
   case 2:
     cout<<"Artist: ";
     getline(cin, collection.songs[buscado-1].artist);
     break;
   case 3:
     cout<<"Album: ";
     getline(cin, collection.songs[buscado-1].album);
     break;
   case 4:
     cout<<"Genre: ";
     getline(cin, collection.songs[buscado-1].genre);
     break;
   case 5:
     cout<<"Url: ";
     getline(cin, collection.songs[buscado-1].url);
     break;
   default: cout<<"Error: Unknow option"<<endl;
   break;
 }
 }while(eleccion!=1 && eleccion!=2 && eleccion!=3 && eleccion!=4 && eleccion!=5);
}
   }
   else{ //si no es un numero mostrar este mensaje de error y vovler a mostrar el menu
     cout<<"No results"<<endl;
   }
}


void deleteSong(Collection &collection){
  
  int buscado_del, encontrado3=0;
  char sino;
  
    for(unsigned int i=0;i<collection.songs.size();i++){
     printSong(collection.songs[i]);
   }
  
    cout<<"Select song: "<<endl;
    cin>>buscado_del;
    
  
    encontrado3=findIdSong(collection, buscado_del);
    if(encontrado3==-1){
      cout<<"Error: Unknown song "<<buscado_del<<endl;
    }
    else{
      cout<<"Delete "<<collection.songs[buscado_del-1].id<<" | "<<collection.songs[buscado_del-1].title<<" | ";
      cout<<collection.songs[buscado_del-1].artist<<" | "<<collection.songs[buscado_del-1].album<<" | "<<collection.songs[buscado_del-1].genre<<"? (Y/N)"<<endl;
      cin>>sino;
      cin.get();
      if(sino=='N'){
cout<<"Song not deleted"<<endl;
      }
      else{
collection.songs.erase(collection.songs.begin()+buscado_del-1);
      }
    }
}

PD: ¿Cómo hacéis para que el código os salga en colores en el foro?

Gracias.
« Última modificación: 14 Febrero 2014, 22:56 pm por Sefean » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Modulo distinguir letras de numeros
« Respuesta #9 en: 15 Febrero 2014, 05:43 am »


PD: ¿Cómo hacéis para que el código os salga en colores en el foro?


Elige las etiquetas de C++ en lugar de las de C.

Lo de las opciones ya funciona, aunque creo que te faltan por implementar otras funciones:


Código
  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4. #include <cstdlib>
  5. #include <cstring>
  6.  
  7. using namespace std;
  8.  
  9. typedef struct
  10. {
  11.  int id; // El identificador de una nueva cancion debe ser igual a idNextSong
  12.  string title;
  13.  string artist;
  14.  string album;
  15.  string genre;
  16.  string url;
  17. } Song;
  18.  
  19. typedef struct
  20. {
  21.  vector<Song> songs;
  22.  int idNextSong;  // Cada vez que se anyada una cancion a la coleccion, incrementar idNextSong
  23. } Collection;
  24.  
  25.  
  26. // Función para inicializar los valores de la colección
  27. Collection createCollection();
  28.  
  29. //rellenar datos cancion
  30. Song demandSong();
  31.  
  32. //comprobar cancion
  33. bool isSongInCollection(const Collection &collection, Song song);
  34.  
  35. //añadir cancion
  36. bool addSong(Collection &collection);
  37.  
  38. //imprimir canciones
  39. void printSong(Song song);
  40.  
  41. //buscar y mostrar canciones
  42. bool showCollection(const Collection &collection);
  43.  
  44. //encontrar ir
  45. int findIdSong(const Collection &collection, int id);
  46.  
  47. //editar la cancion
  48. void editSong(Collection &collection);
  49.  
  50. //borrar la cancion
  51. void deleteSong(Collection &collection);
  52.  
  53. //prueba
  54. bool Comprobarnumero(int numero);
  55.  
  56. // Implementar resto de funciones
  57.  
  58. int main()
  59. {
  60.  Collection collection=createCollection();
  61.  
  62.  
  63.  char opcion[10];
  64.  int longitud=0;
  65.  
  66.    do{
  67.      cout<<"--------------------------------"<<endl;
  68.      cout<<"----------- MiniTunes ----------"<<endl;
  69.      cout<<"--------------------------------"<<endl;
  70.      cout<<"1- Add song"<<endl;
  71.      cout<<"2- Edit song"<<endl;
  72.      cout<<"3- Delete song"<<endl;
  73.      cout<<"4- Show collection"<<endl;
  74.      cout<<"5- Manage playlist"<<endl;
  75.      cout<<"6- Import iTunes JSON data"<<endl;
  76.      cout<<"7- Export playlist to XSPF"<<endl;
  77.      cout<<"8- Save data"<<endl;
  78.      cout<<"9- Load data"<<endl;
  79.      cout<<"0- Play playlist"<<endl;
  80.      cout<<"q- Quit"<<endl;
  81.      cout<<"Option: ";
  82.      cin>>opcion;
  83.      cin.get();
  84.      longitud=strlen(opcion);
  85.      if (longitud>=2 )
  86.        opcion[0]='a';
  87.      if (opcion[0]!='1' && opcion[0]!='2' && opcion[0]!='3' && opcion[0]!='4' &&
  88.          opcion[0]!='5' && opcion[0]!='6' && opcion[0]!='7' && opcion[0]!='8' && opcion[0]!='9' && opcion[0]!='0' && opcion[0]!='q'){
  89. cout<<"Error: Unknown option"<<endl;
  90.      }
  91.      switch (opcion[0]){
  92. case '1':
  93.  addSong(collection);
  94.  break;
  95. case '2': editSong(collection);
  96.  break;
  97. case '3':
  98.  deleteSong(collection);
  99.  break;
  100. case '4':
  101.  showCollection(collection);
  102.  break;
  103.      }
  104.  }while(opcion[0]!='q');
  105.  
  106.  return 0;
  107. }
  108.  
  109. Collection createCollection()
  110. {
  111.  Collection collection;
  112.  collection.idNextSong=1;
  113.  
  114.  return collection;
  115. }
  116.  
  117. Song demandSong(){
  118.  
  119.  Song song;
  120.  
  121.  cout<<"Title: ";
  122.  getline(cin, song.title);
  123.  cout<<"Artist: ";
  124.  getline(cin, song.artist);
  125.  cout<<"Album: ";
  126.  getline(cin, song.album);
  127.  cout<<"Genre: ";
  128.  getline(cin,song.genre);
  129.  cout<<"Url: ";
  130.  getline(cin, song.url);
  131.  
  132.  
  133.  return song;
  134. }
  135.  
  136. bool isSongInCollection(const Collection &collection, Song song){
  137.  
  138.  bool repetida=false;
  139.  unsigned int i;
  140.  
  141.  for(i=0;i<collection.songs.size() && !repetida;i++){
  142.    if(song.title==collection.songs[i].title && collection.songs[i].artist==song.artist){
  143.      repetida=true;
  144.    }
  145.  }
  146.  return repetida;
  147.  
  148. }
  149.  
  150. bool addSong(Collection &collection){
  151.  
  152.  bool repetida;
  153.  
  154.   Song song=demandSong();
  155.  
  156.  
  157.   repetida=isSongInCollection(collection, song);
  158.   if (repetida==true){
  159.     cout<<"The song "<<song.title<<" is already in the collection"<<endl;
  160.   }
  161.   else {
  162.   song.id=collection.idNextSong;
  163.   collection.songs.push_back(song);
  164.     collection.idNextSong++;
  165.   }
  166. return repetida;
  167. }
  168.  
  169. void printSong(Song song){
  170.    cout<<song.id<<" | "<<song.title<<" | "<<song.artist<<" | "<<song.album<<" | "<<song.genre<<endl;
  171. }
  172.  
  173. bool showCollection(const Collection &collection){
  174.  
  175.  string buscado;
  176.  bool encontrado;
  177.  int aux=0;
  178.  
  179.  cout<<"Search: "<<endl;
  180.  getline(cin, buscado);
  181.  
  182.  
  183.    for(unsigned int i=0;i<collection.songs.size();i++){
  184.  
  185.      encontrado=false;
  186.  
  187.      if (collection.songs[i].title.find(buscado)!=string::npos){
  188. encontrado=true;
  189.      }
  190.      else if(collection.songs[i].artist.find(buscado)!=string::npos){
  191. encontrado=true;
  192.      }
  193.      else if(collection.songs[i].album.find(buscado)!=string::npos){
  194. encontrado=true;
  195.      }
  196.      else if(collection.songs[i].genre.find(buscado)!=string::npos){
  197. encontrado=true;
  198.      }
  199.      if (encontrado==true){
  200. printSong(collection.songs[i]);
  201. aux++;
  202. }
  203.    }
  204.  
  205.  if(aux==0){
  206.    cout<<"No results"<<endl;
  207.  }
  208.  
  209. return encontrado;
  210. }
  211.  
  212. int findIdSong(const Collection &collection, int id){
  213.  
  214.  int encontrado=-1;
  215.  
  216.  
  217.   for(unsigned int k=0;k<=collection.songs.size();k++){
  218.   if(id==collection.songs[k].id){
  219.      encontrado=k+1;
  220.      }
  221.   }
  222.  
  223.    return encontrado;
  224. }
  225.  
  226. void editSong(Collection &collection){
  227.  
  228.  int encontrado, eleccion, buscado,aux=0;;
  229.  
  230.   for(unsigned int i=0;i<collection.songs.size();i++){
  231.     printSong(collection.songs[i]);
  232.   }
  233.  char buscado_char[100];
  234.   cout<<"Select song:"<<endl;
  235.   cin>>buscado_char;
  236.   for (int i=0;buscado_char[i];i++){
  237.      aux++;
  238.      if (buscado_char[i]<'0' || buscado_char[i]>'9'){
  239.            break;
  240.        }
  241.    }
  242.    if (strlen(buscado_char)==aux){
  243.  
  244.   buscado=atoi(buscado_char);
  245.   encontrado=findIdSong(collection, buscado);
  246.  
  247.   if(aux==2){
  248. cout<<"Error: Unknown song "<<buscado<<endl;
  249.    }
  250.    else{
  251.      do{
  252.  cout<<"Edit (1-Title, 2-Artist, 3-Album, 4-Genre, 5-Url):"<<endl;
  253.  cin>>eleccion;
  254.  cin.get();
  255.  switch(eleccion){
  256.    case 1:
  257.      cout<<"Title: ";
  258.      getline(cin, collection.songs[buscado-1].title);
  259.      break;
  260.    case 2:
  261.      cout<<"Artist: ";
  262.      getline(cin, collection.songs[buscado-1].artist);
  263.      break;
  264.    case 3:
  265.      cout<<"Album: ";
  266.      getline(cin, collection.songs[buscado-1].album);
  267.      break;
  268.    case 4:
  269.      cout<<"Genre: ";
  270.      getline(cin, collection.songs[buscado-1].genre);
  271.      break;
  272.    case 5:
  273.      cout<<"Url: ";
  274.      getline(cin, collection.songs[buscado-1].url);
  275.      break;
  276.    default: cout<<"Error: Unknow option"<<endl;
  277.    break;
  278.  }
  279.  }while(eleccion!=1 && eleccion!=2 && eleccion!=3 && eleccion!=4 && eleccion!=5);
  280. }
  281.   }
  282.   else{ //si no es un numero mostrar este mensaje de error y vovler a mostrar el menu
  283.     cout<<"No results"<<endl;
  284.   }
  285. }
  286.  
  287.  
  288. void deleteSong(Collection &collection){
  289.  
  290.  int buscado_del, encontrado3=0;
  291.  char sino;
  292.  
  293.    for(unsigned int i=0;i<collection.songs.size();i++){
  294.     printSong(collection.songs[i]);
  295.   }
  296.  
  297.    cout<<"Select song: "<<endl;
  298.    cin>>buscado_del;
  299.  
  300.  
  301.    encontrado3=findIdSong(collection, buscado_del);
  302.    if(encontrado3==-1){
  303.      cout<<"Error: Unknown song "<<buscado_del<<endl;
  304.    }
  305.    else{
  306.      cout<<"Delete "<<collection.songs[buscado_del-1].id<<" | "<<collection.songs[buscado_del-1].title<<" | ";
  307.      cout<<collection.songs[buscado_del-1].artist<<" | "<<collection.songs[buscado_del-1].album<<" | "<<collection.songs[buscado_del-1].genre<<"? (Y/N)"<<endl;
  308.      cin>>sino;
  309.      cin.get();
  310.      if(sino=='N'){
  311. cout<<"Song not deleted"<<endl;
  312.      }
  313.      else{
  314. collection.songs.erase(collection.songs.begin()+buscado_del-1);
  315.      }
  316.    }
  317. }
  318. /**********    FUNCION COMPRUEBA ENTERO   *************/
  319. int comprobar_cadena_como_numero (char cadena[100]){
  320.    for (int i=0;cadena[i];i++){
  321.      if (cadena[i]<'0' || cadena[i]>'9'){
  322.            return 1;
  323.        }
  324.    }
  325.    return 2;
  326. }
  327. /********************************************************/
  328.  

¡¡¡¡ Saluditos! ..... !!!!



En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Decifrador de numeros a letras [JAVA]
Java
diegoak 1 4,488 Último mensaje 16 Marzo 2005, 16:27 pm
por diegoak
Como pasar de letras a numeros
Programación Visual Basic
kakinets 2 2,780 Último mensaje 2 Julio 2005, 21:05 pm
por maxnet
For con números, muy bonito, pero con letras?? « 1 2 »
Programación Visual Basic
‭lipman 17 5,892 Último mensaje 3 Mayo 2007, 20:30 pm
por Tyrz
Redes ONOXXXX letras y numeros
Hacking Wireless
josemanuelsurf 6 16,160 Último mensaje 7 Julio 2011, 14:37 pm
por frakc/kcdtv
Combinaciones letras o numeros « 1 2 »
.NET (C#, VB.NET, ASP)
luis456 11 8,988 Último mensaje 8 Febrero 2014, 11:43 am
por luis456
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines