0

Tengo que validar si el número ingresado en un char[6] es solamente un número (o sea si solo la posición 0 tiene algo cargado y el resto no) y además validar que esta información que tenga sea un número. El problema es que declaré estas condiciones como supongo que debería de ser, pero nunca entra en el if. ¿Cuál es el problema o cómo debo declarar esta condición?

    scanf("%s",&nueva->apos);
    if(nueva->apos[0]>=48&&nueva->apos[0]<=57&&nueva->apos[1]==0){
        if(nueva->apos[2]==0){
            num1=(nueva->apos[0]-48);
            nueva->nums[0]=num1;
            nueva->apos[2]='\0';
            goto agregar;
        } else{
            goto invalido;
        }
    }
1
  • Inicializa apos con 0s. scanf solo estaría modificando los primeros 2 caracteres. Los otros 4 deben tener basura. Por cierto, es recomendable evitar goto la mayoría de las veces.
    – Mateo
    Commented el 1 jul. a las 12:29

1 respuesta 1

0

En este fragmento de código se está verificando si el segundo carácter es un carácter nulo '\0', apos[1]==0.

Lo que hace es comparar el ASCII de los caracteres y no los propios caracteres en esta parte donde ocurrió el error.

En ASCII 0, también es un espacio en blanco, entonces al hacer la comparación nueva->apos[1] == 0, el retorno es true incluso si el carácter no es '\0'. Es necesario verificar el tamaño de la string.

Corrección:

  • Verifica si la cadena tiene solo 1 carácter.
  • Valida el primer carácter.

cod:

if (strlen(nueva->apos) == 1) {
    if (nueva->apos[0] >= 48 && nueva->apos[0] <= 57) { 
1
  • El usuario no tiene forma de ingresar un carácter nulo. strlen justamente avanza hasta encontrar un caracter nulo así que es lo mismo usar strlen(apos) == 1 que apos[0] != 0 && apos[1] == 0
    – Mateo
    Commented el 1 jul. a las 15:23

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.