1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C, Contar numeros + ASCII

Discussão em 'Programação' iniciada por X3minater, 3 de Janeiro de 2008. (Respostas: 3; Visualizações: 1824)

  1. X3minater

    X3minater Power Member

    Boas

    Queria arranjar uma função que contasse 9 digitos de um numero introduzido... (ex: 846248654, 074534054, 000000000, ...) mas que contasse os 0 como digitos e desse erro quando não eram introduzidos 9 digitos!

    Fiz este código, mas dá-me sempre ERRO! :S
    Código:
    #include <stdio.h>
    #include <string.h>
    
    int main(void){
    char cont[10];
    char ch;
    int i=0, op=1;
    
    do{
    printf("Introduza um inteiro de 9 digitos: ");
        while ((ch = getchar()) != '\n');{
                        cont[i++] = ch;}
                    cont[i] = '\0';
        if(i!=10){
            printf("ERRO\n\n");
            }
        else
            op = 2;
    } while(op==1);
    
    printf("%s", cont);
    
    return 0;
    }
    E depois fiz outro:
    Código:
    #include <stdio.h>
    #include <string.h>
    
    int main(void){
    char cont[10];
    int i;
    
    printf("Introduza um inteiro de 9 digitos: ");
    scanf("%s", cont);
    
    for(i=0; i<10; i++){
        if(cont[i]<=47 && cont[i]>=58){
            printf("ERRO, NÃO E UM NUMERO\n");
            return -1;
        }
    }
    if(strlen(cont)!=9){
        printf("MENOS DE 9 DIGITOS\n");
        return -1;
        }        
    
        
    printf("%s", cont);
    
    return 0;
    }
    
    Neste ultimo, utilizei o for para ver se os numero introduzidos faziam parte da tabela ASCII (entre 48 e 57) mas não deve ser assim que se faz... então como é?
     
  2. Baderous

    Baderous Banido

    Vê se isto ajuda:

    Código:
    #include <ctype.h>
    #include <stdio.h>
    
    char * le_inteiro(char *inteiro) {
        int i=0;
        do {
            inteiro[i]=getchar();
            if (!isdigit(inteiro[i])) {
               printf("Erro!\n");
               --i;
               }
            fflush(stdin);
            i++;
            } while (i!=9);
        inteiro[i]='\0';
        return inteiro;
    }
     
  3. Tyran

    Tyran Power Member

    Esse fflush(stdin) só funciona em windows penso, pelo menos em linux não o vejo fazer nada...
    cumpzz
     
  4. Baderous

    Baderous Banido

    Pois eu sei que é mau hábito, mas era só para não estar a definir uma função para limpar o buffer. Mas aqui fica uma para substituir o fflush(stdin):

    Código:
    void limpa_buffer()
    {
      char c;
      do
      {
        c=getchar();
      } while(c!='\n');
    }
     

Partilhar esta Página