C, Contar numeros + ASCII

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 é?
 
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;
}
 
Esse fflush(stdin) só funciona em windows penso, pelo menos em linux não o vejo fazer nada...
cumpzz

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');
}
 
Back
Topo