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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cadena de caracteres en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cadena de caracteres en C  (Leído 3,314 veces)
Jurott1

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Cadena de caracteres en C
« en: 1 Mayo 2017, 02:28 am »

Buenas,

el problema que tengo es que necesito hacer una función que va a recibir una cadena de 50 caracteres pero solo debe aceptar números del 1 al 10, cualquier otra cadena ya sea un número más alto de 10, letras o una cadena vacía(que no se introduzca nada o con espacios) debe decir que da un error.

Empecé el programa y conseguí que leyese de 0 al 9 pero lo hice un poco rudimentario entonces el que utilicé no puedo modificarlo para leer dos cifras ya que me basé en leer y guardar la diferencia entre leer el principio y final de la cadena y colocar un if para que se acomodase entre el 0 y el 9, pero no me sirve para cifras doble(en este caso solo el 10). Alguna idea ?


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Cadena de caracteres en C
« Respuesta #1 en: 1 Mayo 2017, 15:33 pm »

Publica el trozo de codigo relevante, muestra como lo probaste, que es lo que no funciona y como quieres que funcione.


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Jurott1

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Cadena de caracteres en C
« Respuesta #2 en: 1 Mayo 2017, 16:33 pm »

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int main(){
  5.  int i=0,j=0,contador=0,resul;
  6.  char respuesta[50],p;
  7.  
  8.  do{
  9.  
  10.  printf ("Introduzca un numero entre 0 y 10\n");
  11.  fgets(respuesta,sizeof(respuesta),stdin);
  12.  
  13.  for(j=0;respuesta[i] != '\0'; j++){
  14.    contador++;
  15.    resul=contador;
  16.  }
  17.  } while(resul>50); */Deberia preguntar todo el rato por una cadena que tenga menos de 50 caracteres*/
  18.  
  19. */Una vez que la cadena sea del tamanhoo correcto tenemos que ver que cumpla: ser un digito entre 0 y 10, si es otra cosa, ya sea otro numero, letras, blancos
  20. o saltos de linea debe decir que es incorrecto , en estos casos debemos pedir otra vez una cadena*/
  21.  for(i=0;respuesta[i] != '\0';i++){
  22.    p=respuesta[i];
  23.  
  24.    if ((0<=p<=10 && isdigit(p))) {
  25.      printf("bien\n");
  26.      break;
  27.    }
  28.  
  29.    if ((p<0 || p>10) && isdigit(p))
  30.   printf ("mal\n");
  31.  
  32.    if(isalpha(p)){
  33.      printf("incorrecto\n");
  34.    break;
  35.    }
  36.  
  37.  }
  38.  return 0;
  39. }
  40.  
« Última modificación: 1 Mayo 2017, 16:41 pm por Jurott1 » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Cadena de caracteres en C
« Respuesta #3 en: 1 Mayo 2017, 17:19 pm »

La comprobación que haces para comprobar si la respuesta es mayor de 50 caracteres no es necesaria pues fgets nunca te dejará introducir más caracteres que los que les marcas.

Código:
if((0<=p<=10 && isdigit(p))
esto está mal pues los números se guardan en ASCII no literales, por tanto 0<=p<=10, además de ser una construcción lógica mal hecha en C no comprobará lo que buscas. Deberías usar funciones que comprobaran cadenas, como strcmp.
En línea

Jurott1

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Cadena de caracteres en C
« Respuesta #4 en: 1 Mayo 2017, 18:41 pm »

El problema es que necesito saber si la cadena introducida por el usuario es mayor de 50 caracteres para decirle que la longitud es excesiva y pedirle que la vuelva a introducir.

Si hiciese la comprobación primero de si es un número con:
Código
  1. if(isdigit(p)){
  2. ....
  3. }

como haría para saber si ese número que me han dado es uno que esté entre el 0 y el 10 ?
En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Cadena de caracteres en C
« Respuesta #5 en: 1 Mayo 2017, 18:54 pm »

Eso es lo que hace isdigit, es superfluo comprobarlo después.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Cadena de caracteres en C
« Respuesta #6 en: 1 Mayo 2017, 19:19 pm »

Hola, Jurott1.
¿Esto te puede servir?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main( int argc,char **argv ){
  5. int ok, numero, ch;
  6. do{
  7. printf("\n Introduzca un numero entre 1 y 10 ...............:");
  8. ok = scanf("%d",&numero) == 1 && numero >= 1 && numero <= 10;  
  9. while ((ch = getchar()) != EOF && ch != '\n');
  10. }while(!ok);
  11.  
  12. return EXIT_SUCCESS;
  13. }

Saludos.
« Última modificación: 1 Mayo 2017, 20:49 pm por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Jurott1

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Cadena de caracteres en C
« Respuesta #7 en: 1 Mayo 2017, 23:37 pm »

Código
  1. int entrenumeros(num1,num2){
  2. int i=0,resp;
  3. char respuesta[15];
  4.  
  5. do{
  6.    printf("Introduzca un numero entre %i y %i:\n",num1, num2);
  7.    fgets(respuesta,sizeof(respuesta),stdin);
  8.  
  9.    for(i=0; respuesta[i] != '\0'; i++){ //lee los caracteres de uno en uno.
  10.  
  11.        if (isdigit(respuesta[i])){ //Si es un digito lo pone en la variable resp
  12.            resp=atoi(respuesta);
  13.  
  14.            if ((resp>=num1 && resp<=num2)){ //Si resp esta entre los dos numeros que nosotros ponemos como parametros es correcto y sale del for y del do-while, retornando el valor de resp al programa principal
  15.               break;
  16.               }
  17.            if((resp<num1 || resp>num2)){ //Si el numero no esta entre los parametros muestra el mensaje
  18.            printf("Has realizado una seleccion no valida\n");
  19.            break;
  20.            }
  21.        }
  22.  
  23.        if (isalpha(respuesta[i])){ //si es un caracter muestra el mensaje
  24.        printf("Has realizado una seleccion no valida\n");
  25.        break;
  26.        }
  27.     }
  28. } while (!(resp>=num1 && resp<=num2)); //Solo sale si el numero introducido se encuentra entre los parametros puestos por nosotros.
  29.  
  30. return resp;
  31. }      

He hecho este codigo pero tengo un problema, ahora los parametros introducidos a la funcion los damos nosotros y el dato que el usuario nos de debe estar entre num1 y num2, el problema es cuando ponen una cadena del tipo "2ASKDASDL" que lee primero el 2 pero ignora el resto de la cadena (cosa que deberia dar error y mostrar mensaje de seleccion no valido).
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Cadena de caracteres en C
« Respuesta #8 en: 2 Mayo 2017, 01:33 am »

De seguro que has pensado en la solución pero la has descartado por demasiado complicada. Algo así cómo:
Citar
Tengo que capturar una frase desde el teclado y debo mirar si todo son números. Si lo son tengo que ver si esos números están entre el máximo y mínimo que me da el usuario y si no dar un error.

El enunciado de la idea te da la solución.
1. Capturas la frase
2. Te mueves carácter por carácter para ver si es un dígito (ya has usado isdigit). Si todo son dígitos continuas con el punto 3, sino marcas error y sales.
3. Transformas la cadena a un número. Con sscanf (las dos eses no son un error) lo conseguirás.
4. Compruebas que están entre los límites.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
cadena de caracteres
Programación C/C++
Ander123 1 2,549 Último mensaje 6 Septiembre 2012, 14:15 pm
por avesudra
cadena de caracteres
Programación C/C++
brayan 5 2,791 Último mensaje 27 Abril 2017, 18:41 pm
por Fedex15
Cadena aleatoria de caracteres
Java
DaniSM98 4 4,312 Último mensaje 21 Enero 2018, 08:22 am
por rub'n
MOVIDO: Cadena aleatoria de caracteres
Programación General
Eleкtro 0 2,234 Último mensaje 15 Enero 2018, 09:56 am
por Eleкtro
Cargar archivo binario(No lee los caracteres de la cadena)
Programación C/C++
arturo2507 1 1,507 Último mensaje 24 Noviembre 2018, 00:28 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines