• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

x3minater

Contar números

7 mensagens neste tópico

Boas

Existe alguma função, do estilo de "strlen", que conte apenas algarismo(0 incluido), e não caracteres?

Ou então, qual a maneira mais fácil de fazer isso?

Thanks! ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que não. Queres fazer isso a uma string ? Facilmente fazes uma função para contar isso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que não. Queres fazer isso a uma string ? Facilmente fazes uma função para contar isso...

Pois, mas é ai que eu estou a ter os problemas! :S

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

#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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens um ; a mais depois do while.

Depois tens 3 problemas:

o if (i!=10) não vai funcionar porque quando encontrar um '\n', o i já não é incrementado;

tens que fazer reset ao i em cada iteração do while, senão vais escrever memória que não está atribuída a cont; provavelmente vais escrever por cima de ch, de i e de op;

se o utilizador inserir mais de 9 caracteres, o tamanho de cont não chega.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens um ; a mais depois do while.

Depois tens 3 problemas:

o if (i!=10) não vai funcionar porque quando encontrar um '\n', o i já não é incrementado;

tens que fazer reset ao i em cada iteração do while, senão vais escrever memória que não está atribuída a cont; provavelmente vais escrever por cima de ch, de i e de op;

se o utilizador inserir mais de 9 caracteres, o tamanho de cont não chega.

Por outras palavras: "Esquece"! ;)

Então e este 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;
}

Só não consigo por a verificação de caracteres ou numeros a funcionar... Como é que eu posso fazer isso usando os valores ASCII?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pensa bem... um caracter não pode ter um código menor ou igual a 47 E maior ou igual do que 58.

e podes usar os caracteres entre plicas em vez dos códigos ascii:

if( cont[i]< '0'  || cont[i]> '9' )

PS: já agora, ao postar o código coloca na tag  "code=c". Fica assim k tá mt mais legivel.

Edit: Um moderador já se encarregou disso ;)

Edit2: Com esse código tens um problema: se o utilizador digitar uma string com mais de 9 caracteres o teu código estoura ou vai mexer em posições de memória de outras variáveis.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em vez de scanf, usa o fgets:

fgets(cont, 10, stdin);

Assim o teu programa já não rebenta se o utilizador escrever mais do que o teu array aguenta.

Outra coisa é no if teres a lógica incorrecta, como já disse o mogers.

Outra coisa ainda é a ordem dos teus 2 ifs. Devias verificar se tem os 9 digitos antes de verificar a autencidade desses digitos.

Finalmente, tornar isso numa funçao para que possa ser reutilizada.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora