/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema con algoritmo

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Filzix



Registrado: 30 Oct 2007
Mensajes: 23

MensajePublicado: 21/03/2008 3:31 am
Título: Problema con algoritmo

tengo este algoritmo que lo que hace es me verificar si lo q introduce por teclado el usuario es un numero entre el 1 y el 12 pero teniendo en cuenta el control de error por si introduce por ejemplo "9er"

El problema que tengo es siempre me entra en la parte del codigo señalado aunque solo introduzca un numero (p.e. "2")

Alguien sabe el porque?

Lenguaje C, Dev-C++
Código:

#include <stdio.h>
#include <string.h>
#define N 5

int main(){
    char a[N],b[N];
    int i,str,num,correct,cont;
   
    cont = 0;
    while (cont == 0){
        printf("Introduce Mes\n");
        scanf("%s",a);
        str = strlen(a);
        for(i=0;i<str;i++){
           //AQUI ES DONDE ENTRA
           if( (a[i]<'0') || (a[i]>'9') ){
                 correct=1;
                 i=str;   
            }
            /////////////////////////
             else {
                 b[i]= a[i];
            }
        }
        if(correct==1){
            printf("error\n");
        } else {
            num = atoi(b);
            if((num<1)||(num>12)){
                 printf("error\n");
            } else {
                 cont = 1;
            }
        }       
    }   
   
return 0;
}
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 1000
Ubicación: Blumenau (Br)

MensajePublicado: 21/03/2008 11:19 am
Título:

El problema fundamental radica en que la función atoi pertenece al header <stdlib.h>, por lo tanto tienes que incluirla.
También deberías inicializar la variable correct a un valor, por ejemplo a 0 dentro del bucle while.
La variable b (array) no es necesaria, con a es suficiente.

Un ejemplo en C estándar sería:
Código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 5

int main(void)
{
    char a[N];
    int i, str, num;
    enum boolean
    {
        False, True
    };
    enum boolean
        cont = False,
        correct;

    while (cont == False)
    {
        correct = False;
        printf("Introduce Mes\n");
        scanf("%s", a);
        str = strlen(a);

        for (i = 0; i < str; i++)
           if ((a[i] < '0') || (a[i] > '9'))
                correct = True;

        if (correct == True)
            printf("error\n");
        else
        {
            num = atoi(a);
            if (num < 1 || num > 12)
                printf("error\n");
            else
                cont = True;
        }
    }

    return EXIT_SUCCESS;
}



Un saludo
Volver arriba
Filzix



Registrado: 30 Oct 2007
Mensajes: 23

MensajePublicado: 21/03/2008 11:38 am
Título:

Perfecto, Muchas gracias.
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com