Logo Hardware.com.br
felipefpt
felipefpt Veterano Registrado
1.4K Mensagens 50 Curtidas

evento em C

#1 Por felipefpt 24/12/2010 - 00:15
Olá fiz isso daki


printf("\n\n vamos começar digite o primeiro valor e logo apos digite o operador\n\n"
scanf("%d", &a);
int Count;
char ch;
for (Count=1;;Count++)
{
ch = getch();
if (ch == '+') {
system("cls"
printf("\n Agora digite o outro valor:"
scanf("%d", &b); }
if (ch == '=') {
printf("\n total = ", a + b);

}
}




ta meio viajado esse codigo ai mais isso foi uma tentativa de fazer um evento em certa parte deu certo
mais o que de errado (alem da soma no final que nao ta aparecendo, mais por enquanto essa nao e minha duvida) foi que ao apertar +, ele nao executa a funcao direto tem que apertar + e depois enter pra funcionar, o que posso fazer pra assim que apertar qualquer tecla ele execute uma função?
felipefpt
felipefpt Veterano Registrado
1.4K Mensagens 50 Curtidas
#2 Por felipefpt
24/12/2010 - 20:12
Bem consegui fazer um jeito aqui que toda vez que 1 numero e digitado ele é lido e quando é apertado o sinal de + ele armazena o numero digitado em uma variavel

[PHP] while (!kbhit() != EOF && c != '\n' )
{
if(kbhit()){
c=getch();
if ( c == '0'){
strcat(&num,"0");
system("cls");
printf("%s", &num);
}
if ( c == '1'){
strcat(&num,"1");
system("cls");
printf("%s", &num);
}
if ( c == '2'){
strcat(&num,"2");
system("cls");
printf("%s", &num);
}
if ( c == '3'){
strcat(&num,"3");
system("cls");
printf("%s", &num);
}
if ( c == '4'){
strcat(&num,"4");
system("cls");
printf("%s", &num);
}
if ( c == '5'){
strcat(&num,"5");
system("cls");
printf("%s", &num);
}
if ( c == '6'){
strcat(&num,"6");
system("cls");
printf("%s", &num);
}
if ( c == '7'){
strcat(&num,"7");
system("cls");
printf("%s", &num);
}
if ( c == '8'){
strcat(&num,"8");
system("cls");
printf("%s", &num);
}
if ( c == '9'){
strcat(&num,"9");
system("cls");
printf("%s", &num);
}

if ( c == '+'){
printf("\n\n\no numero e : %s", &num);


}

}
}[/PHP]


agora me deem alguma dica, como posso fazer com que ao apertar o + ele aramzene esse valor em uma variavel e volte a escrever outro numero, ai quando apertar + denovo some os 2 ultimos numeros e assim sucessivamente?

minha intenção é fazer uma calculadora que você vai escrevendo o numero + outro numero e vai mostrando o resultado, não só uma calculadora com 2 variaveis
Projetos de eletrônica?
http://projetoseletronica.com
cadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gif
screenblack
screenblack Super Participante Registrado
360 Mensagens 18 Curtidas
#3 Por screenblack
24/12/2010 - 20:59
Você gostaria de fazer um interpretador de funções, correto?

Acho que o exemplo abaixo lhe ajude:

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

int main( void )
{

int a = 0;
int b = 0;
char operador = '\0';

printf( "\n\n vamos começar: digite a expressao (ex: 2 + 2): " );
scanf( "%d %c %d", &a, &operador, &b );

if( operador == '+' )
printf( "\n total = %d", a + b );

if( operador == '-' )
printf( "\n total = %d", a - b );

if( operador == '*' )
printf( "\n total = %d", a * b );

if( operador == '/' )
printf( "\n total = %.2f", (float) a / b );

return 0;
}
"Se BEBER, não compile o KERNEL. Se compilar o KERNEL, não BEBA." By: A.A.
screenblack
screenblack Super Participante Registrado
360 Mensagens 18 Curtidas
#5 Por screenblack
25/12/2010 - 01:49
Você pode trabalhar usando pilha.
Vai empilhando os dados até chegar o valor '=', então desempilha fazendo o cálculo, empilha o resultado junto com o próximo operador e o valor a ser calculado, e assim por diante.
Exemplo:

(empilha) 2+2
(desempilha resolvendo a equação) 4
(empilha) 4*3
(desempilha resolvendo a equação) 12
(empilha) 12/6
(desempilha resolvendo a equação) 2
[...]
"Se BEBER, não compile o KERNEL. Se compilar o KERNEL, não BEBA." By: A.A.
felipefpt
felipefpt Veterano Registrado
1.4K Mensagens 50 Curtidas
#6 Por felipefpt
25/12/2010 - 21:48

//CHAMA 1ª FUNCAO QUE DIGITA O PRIEMIRO VAR
//ESCREVE A PRIMEIRA VAR, DEPOIS ENVIA ELA PARA SEGUNDO() QUE ESCREVE A 2ª VAR
//ESCREVE A 2ª VAR E ENVIA AS 2 PARA RESPOSTA
//ATRIBIU A SOMA PARA UMA VARIAVEL TOTAL E MOSTRA O RESULTADO TOTAL + TERCEIRA QUALQUER (a principio a variavel terceira vai ser nula)
//LOGO APOS CHAMA A 3ª FUNCAO chamada terceiro
//este terceiro ecreve um numero em uma varivel chamada tres e envia para resposta
//RESPOSTA RECEBE ESTE TERCEIRO NUMERO
//FAZ A OPERAÇÃO VARIAVEL TOTAL + VARIAVEL TRES
//CHAMA NOVAMENTe A FUNCÃO TERCEIRO
//VOLTA PARA 'ESTE TERCEIRO.....'
//VAI REPETINDO ESTE PROCESSO ATE SAIR

fiz um esquema de como funcionaria o programa (isso é algoritimo né?, so meio novo to aprendendo programação por conta propria)

mais pela logica que fiz assim funciona ate cheguei a montar mais por uma "doença --" " do dev sei lá aparece umas coisas antes do numro ai quando eu vou converter o char para int não funciona


a 1ª funcao ta assim


void primeiro(c){


char num[1000];

printf("Digite o primeiro valor\n", '\n');
while (!kbhit() != EOF && c != '\n' )
{
if(kbhit()){
c=getch();
if ( c == '0'){
strcat(num,"0&quot;
system("cls&quot;
printf("%s", num);
}
if ( c == '1'){
strcat(num,"1&quot;
system("cls&quot;
printf("%s", num);
}
if ( c == '2'){
strcat(num,"2&quot;
system("cls&quot;
printf("%s", num);
}
if ( c == '3'){
strcat(num,"3&quot;
system("cls&quot;
printf("%s", num);
}
if ( c == '4'){
strcat(num,"4&quot;
system("cls&quot;
printf("%s", num);
}
if ( c == '5'){
strcat(num,"5&quot;
system("cls&quot;
printf("%s", num);
}
if ( c == '6'){
strcat(num,"6&quot;
system("cls&quot;
printf("%s", num);
}
if ( c == '7'){
strcat(num,"7&quot;
system("cls&quot;
printf("%s", num);
}
if ( c == '8'){
strcat(num,"8&quot;
system("cls&quot;
printf("%s", num);
}
if ( c == '9'){
strcat(num,"9&quot;
system("cls&quot;
printf("%s", num);
}

if ( c == '+'){
printf("\n\n\no numero e : %s", &num);
int numw;
numw = atoi(num);
printf("NUMERO %d\n\n\n\n", numw);
segundo(numw , c);
}

}
}

}
aparece umas letras antes do numero o que está errado?


por exemplo ao digitar a o numero 1 a saida fica aassim
£xww1
Projetos de eletrônica?
http://projetoseletronica.com
cadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gif
Delphing
Delphing Geek Registrado
2.1K Mensagens 96 Curtidas
#8 Por Delphing
28/12/2010 - 20:53
aparece umas letras antes do numero o que está errado?

Isso é sujeira, em C você precisa limpar as variáveis.

Abraço
http://www.dotclass.com.br
punk.gif

"Se correr o bicho pega se ficar o bicho come mas se unir o bicho foge."
Mário Sérgio Cortella
http://www.youtube.com/watch?v=IQ9MkP7XWcA

"Para conquistar o que deseja, precisa ser quem é! Do contrário o desejo não é teu a conquista não é tua." by Eu legal.png
screenblack
screenblack Super Participante Registrado
360 Mensagens 18 Curtidas
#9 Por screenblack
29/12/2010 - 00:54
Não entendi porque a função recebe um caracter no parâmetro, se logo em seguida ele será sobrescrito por uma leitura do teclado.
Também não entendi porque usar a função 'kbhit()'. Ao meu ver, não há necessidade, basta garantir que o buffer do teclado esteja sempre limpo. Para isso, basta usar a função 'scanf()' como feito no exemplo abaixo:
[php]
#include
#include
#include

void primeiro( void );

int main( void )
{

primeiro();

return 0;
}

void primeiro( void )
{

char num[1000] = { '\0' }; /** Inicializa o vetor **/
char c = '\0';
int numw = 0;

printf( "Digite o primeiro valor: " );
scanf( "%c%*c", &c );

while( c != '\n' )
{
if( c == '0' )
{
strcat( num, "0" );
system( "cls" );
printf( "%s", num );
}
if( c == '1' )
{
strcat( num, "1" );
system( "cls" );
printf( "%s", num );
}
if( c == '2' )
{
strcat( num, "2" );
system( "cls" );
printf( "%s", num );
}
if( c == '3' )
{
strcat( num, "3" );
system( "cls" );
printf( "%s", num );
}
if( c == '4' )
{
strcat( num, "4" );
system( "cls" );
printf( "%s", num );
}
if( c == '5' )
{
strcat( num, "5" );
system( "cls" );
printf( "%s", num );
}
if( c == '6' )
{
strcat( num, "6" );
system( "cls" );
printf( "%s", num );
}
if( c == '7' )
{
strcat( num, "7" );
system( "cls" );
printf( "%s", num );
}
if( c == '8' )
{
strcat( num, "8" );
system( "cls" );
printf( "%s", num );
}
if( c == '9' )
{
strcat( num, "9" );
system( "cls" );
printf( "%s", num );
}

if( c == '+' )
{
printf( "\n\n\no numero e : %s", num );

numw = atoi( num );

printf( "NUMERO %d\n\n\n\n", numw );

//segundo( numw , c );
}

printf( "Digite o proximo valor: " );
scanf( "%c%*c", &c );
}
}
[/php]

Acho que o código acima já vai te ajudar.
"Se BEBER, não compile o KERNEL. Se compilar o KERNEL, não BEBA." By: A.A.
felipefpt
felipefpt Veterano Registrado
1.4K Mensagens 50 Curtidas
#10 Por felipefpt
29/12/2010 - 21:02
screenblack agora com scanf teria que ficar esperando o enter ser pressionado para poder digitar o segundo valor, vi que o funcionamento do 'kbhit()', ele fica esperando uma tecla ser precionada, ai quando uma tecla é precionada o char C pega ela, então não precisa esperar apertar o enter, coloquei o "\0" em todos os chars, realmente limpo ela não está mais aparecendo

só que mesmo compilando mostra este erro

28 C:\arquivo.c [Warning] passing arg 1 of `strcat' from incompatible pointer type 
Projetos de eletrônica?
http://projetoseletronica.com
cadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gif
Delphing
Delphing Geek Registrado
2.1K Mensagens 96 Curtidas
#11 Por Delphing
29/12/2010 - 21:12
felipefpt tente usar getc ou getchar

Qualquer coisa dá um grito ae

Abraço
http://www.dotclass.com.br
punk.gif

"Se correr o bicho pega se ficar o bicho come mas se unir o bicho foge."
Mário Sérgio Cortella
http://www.youtube.com/watch?v=IQ9MkP7XWcA

"Para conquistar o que deseja, precisa ser quem é! Do contrário o desejo não é teu a conquista não é tua." by Eu legal.png
screenblack
screenblack Super Participante Registrado
360 Mensagens 18 Curtidas
#12 Por screenblack
30/12/2010 - 00:31
Como não foi postado o código inteiro, qual o código referente a linha 28?
É estranho dar esse erro.

A função 'kbhit()' foi criada pela Borland, e não é padrão ANSI C, e também não necessariamente seja compatível com a biblioteca do "windows.h" ou "conio.h". Além disso, ela não faz a leitura do caracter, mas sim, apenas valida se há conteúdo armazenado no buffer de entrada, e retorna como verdadeiro caso exista.

Código sem a função 'kbhit()':
[php]
#include
#include
#include
#include

void primeiro( void );

int main( void )
{

primeiro();

return 0;
}

void primeiro( void )
{

char num[1000] = { '\0' };
char c = '\0';

printf( "Digite o primeiro valor\n" );
c = getch();

while( c != '\r' ) /** No windows, a tecla enter retorna dois valores, que são: carrier return (codigo 13 ou \r) e new line (codigo 10 ou \n), portanto, precisa validar apenas o primeiro **/
{
if( c == '0' )
{
strcat( num, "0" );
system( "cls" );
printf( "%s", num );
}
if( c == '1' )
{
strcat( num, "1" );
system( "cls" );
printf( "%s", num );
}
if( c == '2' )
{
strcat( num, "2" );
system( "cls" );
printf( "%s", num );
}
if( c == '3' )
{
strcat( num, "3" );
system( "cls" );
printf( "%s", num );
}
if( c == '4' )
{
strcat( num, "4" );
system( "cls" );
printf( "%s", num );
}
if( c == '5' )
{
strcat( num, "5" );
system( "cls" );
printf( "%s", num );
}
if( c == '6' )
{
strcat( num, "6" );
system( "cls" );
printf( "%s", num );
}
if( c == '7' )
{
strcat( num, "7" );
system( "cls" );
printf( "%s", num );
}
if( c == '8' )
{
strcat( num, "8" );
system( "cls" );
printf( "%s", num );
}
if( c == '9' )
{
strcat( num, "9" );
system( "cls" );
printf( "%s", num );
}

if( c == '+' )
{
printf( "\n\n\no numero e : %s", num );
int numw;
numw = atoi( num );
printf( "NUMERO %d\n\n\n\n", numw );
// segundo( numw , c );
}

printf("Digite o proximo valor: ");
c = getch();

}
}

[/php]
"Se BEBER, não compile o KERNEL. Se compilar o KERNEL, não BEBA." By: A.A.
felipefpt
felipefpt Veterano Registrado
1.4K Mensagens 50 Curtidas
#13 Por felipefpt
30/12/2010 - 16:13
screenblack fiz um jeito aquie nao deu erro nenhume funcionou


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

void primeiro();
void segundo();
void resposta();
void terceiro();


int main()
{

primeiro(); //CHAMA 1ª FUNCAO QUE DIGITA O PRIEMIRO VAR
}

void primeiro(){
char c = "\0";
char num[1000] = "\0" ;

printf("Digite o primeiro valor\n&quot;

while (!kbhit() != EOF && c != '\n' )
{
if(kbhit()){
c=getch();
if ( c == '0'){
strcat(num,"0&quot;
system("cls&quot;
printf("%s", &num);
}
if ( c == '1'){
strcat(num,"1&quot;
system("cls&quot;
printf("%s", &num);
}
if ( c == '2'){
strcat(num,"2&quot;
system("cls&quot;
printf("%s", &num);
}
if ( c == '3'){
strcat(num,"3&quot;
system("cls&quot;
printf("%s", &num);
}
if ( c == '4'){
strcat(num,"4&quot;
system("cls&quot;
printf("%s", &num);
}
if ( c == '5'){
strcat(num,"5&quot;
system("cls&quot;
printf("%s", &num);
}
if ( c == '6'){
strcat(num,"6&quot;
system("cls&quot;
printf("%s", &num);
}
if ( c == '7'){
strcat(num,"7&quot;
system("cls&quot;
printf("%s", &num);
}
if ( c == '8'){
strcat(num,"8&quot;
system("cls&quot;
printf("%s", &num);
}
if ( c == '9'){
strcat(num,"9&quot;
system("cls&quot;
printf("%s", &num);
}

if ( c == '+'){
printf("\n\n\no numero e : %s \n", &num);
int numw;
numw = atoi(num);
printf("NUMERO %d\n\n\n\n", numw);
segundo(c, numw);
}
}
}

}

void segundo(c, numw){

char numd[1000] = "\0" ;

printf("Digite outro valor\n&quot;

while (!kbhit() != EOF && c != '\n' )
{
if(kbhit()){
c=getch();
if ( c == '0'){
strcat(numd,"0&quot;
system("cls&quot;
printf("%s", &numd);
}
if ( c == '1'){
strcat(numd,"1&quot;
system("cls&quot;
printf("%s", &numd);
}
if ( c == '2'){
strcat(numd,"2&quot;
system("cls&quot;
printf("%s", &numd);
}
if ( c == '3'){
strcat(numd,"3&quot;
system("cls&quot;
printf("%s", &numd);
}
if ( c == '4'){
strcat(numd,"4&quot;
system("cls&quot;
printf("%s", &numd);
}
if ( c == '5'){
strcat(numd,"5&quot;
system("cls&quot;
printf("%s", &numd);
}
if ( c == '6'){
strcat(numd,"6&quot;
system("cls&quot;
printf("%s", &numd);
}
if ( c == '7'){
strcat(numd,"7&quot;
system("cls&quot;
printf("%s", &numd);
}
if ( c == '8'){
strcat(numd,"8&quot;
system("cls&quot;
printf("%s", &numd);
}
if ( c == '9'){
strcat(numd,"9&quot;
system("cls&quot;
printf("%s", &numd);
}

if ( c == '+'){
int segundoa;
int segundo;

segundo = atoi(numd);


segundoa = numw + segundo;

printf("A RESPOSTA e %d: ", segundoa);
terceiro(c, segundoa, numw);
}

}
}
}




void terceiro(c, segundoa, numw){

char numf[1000] = "\0" ;


printf("Digite outro valor\n&quot;

while (!kbhit() != EOF && c != '\n' )
{
if(kbhit()){
c=getch();
if ( c == '0'){
strcat(numf,"0&quot;
system("cls&quot;
printf("%s", &numf);
}
if ( c == '1'){
strcat(numf,"1&quot;
system("cls&quot;
printf("%s", &numf);
}
if ( c == '2'){
strcat(numf,"2&quot;
system("cls&quot;
printf("%s", &numf);
}
if ( c == '3'){
strcat(numf,"3&quot;
system("cls&quot;
printf("%s", &numf);
}
if ( c == '4'){
strcat(numf,"4&quot;
system("cls&quot;
printf("%s", &numf);
}
if ( c == '5'){
strcat(numf,"5&quot;
system("cls&quot;
printf("%s", &numf);
}
if ( c == '6'){
strcat(numf,"6&quot;
system("cls&quot;
printf("%s", &numf);
}
if ( c == '7'){
strcat(numf,"7&quot;
system("cls&quot;
printf("%s", &numf);
}
if ( c == '8'){
strcat(numf,"8&quot;
system("cls&quot;
printf("%s", &numf);
}
if ( c == '9'){
strcat(numf,"9&quot;
system("cls&quot;
printf("%s", &numf);
}

if ( c == '+'){

int tercero;
int terceroa;
tercero = atoi(numf);

terceroa = segundoa + tercero;

printf("\nA resposta e %d: \n", terceroa);

terceiro(c, terceroa);

}

}
}
}


e so ir colocando a operação ele vi somando 1+1=2+3=5 etc.... etc.. e tal smile.png

agora e implementar multiplicação divisao e outros jeitos, o unico problema e que quando eu compilo aparece um warning

 18 C:\defin.c [Warning] initialization makes integer from pointer without a cast
Projetos de eletrônica?
http://projetoseletronica.com
cadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gifcadeado_alegrinho.gif
screenblack
screenblack Super Participante Registrado
360 Mensagens 18 Curtidas
#14 Por screenblack
30/12/2010 - 23:22
Segue a função 'primeiro()' corrigida:
[php]
void primeiro()
{
char c = '\0'; /** Para char, usar apenas (' ') **/
char num[1000] = "\0" ;

printf( "Digite o primeiro valor\n" );

while( !kbhit() != EOF && c != '\r' )
{
if( kbhit() ) {
c = getch();
if( c == '0' ) {
strcat( num, "0" );
system( "cls" );
printf( "%s", num ); /** Toda variável vetor é um ponteiro para a estrutura, portanto, não precisa do '&' **/
}
if( c == '1' ) {
strcat( num, "1" );
system( "cls" );
printf( "%s", num );
}
if( c == '2' ) {
strcat( num, "2" );
system( "cls" );
printf( "%s", num );
}
if( c == '3' ) {
strcat( num, "3" );
system( "cls" );
printf( "%s", num );
}
if( c == '4' ) {
strcat( num, "4" );
system( "cls" );
printf( "%s", num );
}
if( c == '5' ) {
strcat( num, "5" );
system( "cls" );
printf( "%s", num );
}
if( c == '6' ) {
strcat( num, "6" );
system( "cls" );
printf( "%s", num );
}
if( c == '7' ) {
strcat( num, "7" );
system( "cls" );
printf( "%s", num );
}
if( c == '8' ) {
strcat( num, "8" );
system( "cls" );
printf( "%s", num );
}
if( c == '9' ) {
strcat( num, "9" );
system( "cls" );
printf( "%s", num );
}

if( c == '+' ) {
printf( "\n\n\no numero e : %s \n", num );
int numw;
numw = atoi( num );
printf( "NUMERO %d\n\n\n\n", numw );
segundo( c, numw );
}
}
}
}
[/php]
"Se BEBER, não compile o KERNEL. Se compilar o KERNEL, não BEBA." By: A.A.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal