Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Mortalzera

[Resolvido] Qual função é melhor : getchar ou scanf ?

Recommended Posts

Estava lendo o forum, uma usuaria java import.isis acho que é esse o nome, postou um site que falava assim things to avoid : void main(), tinha tbm avoid scanf. Dai gostaria de saber a diferença entre getchar, getch, scanf. Qual vcs mais usam ?

 

Obrigado

 

site : http://www.gidnetwork.com/b-59.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha achei algo assim:

* getchar(); getch(); getche();

O que faz: São funções para ler um caractere do teclado. A diferença entre elas é que a getchar() aguarda teclar antes de efetuar a leitura, enquanto as demais não. Já a diferença entre a getch() e a getche() é que a getche() mostra o caractere digitado na tela, enquanto a getch() não exibe.

http://equipe.nce.ufrj.br/adriano/c/aposti...coes/conio.html

http://ccet.ucs.br/dein/napro/C/ambiente/biblioteca

 

sobre o scanf tenho q dar uma pesquisada melhor pq nunca procurei saber sobre isso antes!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

scanf é bem poderoso.

Para usá-lo adequadamente precisa de um pouco de estudos.

O inconveniente é que ele pode deixar "sujeira" no buffer de entrada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

scanf é bem poderoso.

Para usá-lo adequadamente precisa de um pouco de estudos.

O inconveniente é que ele pode deixar "sujeira" no buffer de entrada.

Exatamente isso que eu tinha em dúvida, eu faria essa "limpeza" através da função fflush() ?

Quais seriam os argumentos da função por exemplo fflush(stdin) ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faça isso.

Se eu concordar em usar essa função para limpar buffer de entrada a Isis me mata. :P

Tem como forçar o scanf a ignorar certas coisas. Além disso temos como limpar o buffer.

Leia esse tópico:

 

http://forum.imasters.com.br/index.php?showtopic=227222

 

 

Exatamente isso que eu tinha em dúvida, eu faria essa "limpeza" através da função fflush() ?

Quais seriam os argumentos da função por exemplo fflush(stdin) ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
CODE
#include <stdio.h>
#include <stdlib.h>

int main(){

int i=0;
float carlos,joao = 0;

printf("Digite o salario de Carlos : \n");
scanf("%f", &carlos);

joao = carlos/3;

while(joao != carlos){
carlos += carlos*0.02;
joao += joao*0.5;
i= i + 1;
printf("mes : %d", i);
}
printf("\nAgora ele retorna\n");

printf("Rendimento1 : \n%f", carlos);
printf("Rendimento2 : \n%f", joao);

printf("A quantidade de meses é : \n%d", i);
return 0;
}


Esse codigo calcula quanto tempo demora para que o salário do joao se iguale ao de carlos, sendo que ambos investem seu dinhero em juros composto de 5 e 2 por cento respectivamente.

Só que ta entrando em loop infinito eu peço pra ele retornar o rendimento e retorna um valor absurdo.

Vlw's

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dificilmente os dois ficarão exatamente com o mesmo valor, por isso a condição de saída teria que ser outra.

Por exemplo:

 

while(joao < carlos){

Outra coisa é que o salário de João está crescendo 50% a cada mês e não 5%.

 

Veja se agora funciona.

 

 

Esse codigo calcula quanto tempo demora para que o salário do joao se iguale ao de carlos, sendo que ambos investem seu dinhero em juros composto de 5 e 2 por cento respectivamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dificilmente os dois ficarão exatamente com o mesmo valor, por isso a condição de saída teria que ser outra.

Por exemplo:

 

while(joao < carlos){

Outra coisa é que o salário de João está crescendo 50% a cada mês e não 5%.

 

Veja se agora funciona.

 

 

Esse codigo calcula quanto tempo demora para que o salário do joao se iguale ao de carlos, sendo que ambos investem seu dinhero em juros composto de 5 e 2 por cento respectivamente.

Intaum eu coloquei errado essa parte de 0.5 mas na verdade o que eu errei mesmo e que resultou no loop infinito foi q um double tem q ser divido por um numero com precisão decimal fico assim o código

CODE
#include <stdio.h>

#include <stdlib.h>

 

int main(){

 

int i=0;

double carlos,joao = 0;

 

printf("Digite o salario de Carlos : \n");

scanf("%lf", &carlos); // mudei o scanf de %f para %lf pois é double invés de float

 

joao = carlos/3.0; // parte modificada

 

while(joao <= carlos){ // alterado a lógica

carlos += carlos*0.02;

joao += joao*0.05; // corrigido o erro percentual

i= i + 1;

printf("mes : %d", i);

}

printf("\nAgora ele retorna\n");

 

printf("Rendimento1 : \n%lf", carlos);

printf("Rendimento2 : \n%lf", joao);

 

printf("A quantidade de meses é : \n%d", i);

return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que resultou no loop infinito foi a condição do while.

O problema está resolvido?

Na verdade a condição poderia ser != ou <=, o que resultou no loop infinito foi a divisão incorreta de um double por um inteiro "3" quando o correto seria "3.0".

 

Problema resolvido, obrigado a todos que se expressaram

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque != na sua condição e verá que é diferente.

 

Essas duas expressões se equivalem?

 

faça enquanto joao menor ou igual a carlos.

faça enquanto joao diferente de carlos.

 

Não são iguais. Se joao não se igualar a carlo o loop com != ficará infinito.

 

Vou colocar o tópico como resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente você está certo. Só não entendi pq isso.

supondo q o valor carlos seja uma função f(x), e o valor joao uma função g(x).

Existe um x tal que f(x) = g(x), porque a função g(x) cresce a partir de um x' mais rápido que a função f(x).

E o <= é exatamente nessa igualdade que ele para, quando as duas funções forem iguais, o loop encerra, acho que não tem como o valor de g(x) crescer sem que em algum momento ela não se iguale a f(x), essa seria a única explicação pelo a qual o != não funciona, seria a inexistência de um valor de x que f(x) = g(x) .

 

Bom acho que é isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.