Jump to content
Fórum Script Brasil
  • 0

DUVIDAS (BÁSICO) EM C


athoslive

Question

Bom,primeiramente eu quero saber como eu faço uma sequencia de eventos,ex: eu mando printf( > ) e então ele vai andando com a seta pra la -> com outros printfs sem eu precisar apertar 'enter' a cada sequencia. #se não entenderem minha duvida avisem ! o que eu quero fazer é parecido com uma animação manual#

Outra coisa,como eu calculo porcentagem (%) em C? como em uma calculadora.

Se puderem expliquem com códigos por favor, eu uso BORLAND C++.

Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0

já que você ta usando borlando não me preocupei com portabilidade pra Linux.

Vê se esse codigo te da alguma luz.

Abs


#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <math.h>

void main(void)
{
unsigned char col = 10; // atribui o valor da coluna inicial
char passo = 1; // atribui o valor inicial para o passo
char seta = '>' - 1; // atribui o caracter para exibicao usando o codigo ascii

while(1)
{
if (kbhit()) // se alguma tecla for pressionada encerra o programa
break; // encerra o laco

gotoxy(col, 10); // indica a posicao de impressao na tela
printf(" %c \r", seta + passo); // exibe a seta > ou <
col += passo; // muda a coluna de impressao somando 1 para avancar ou -1 para retroceder
if (col == 70 || col == 10) // se atingiu os limites estabelecidos muda o passo para -1 ou 1
passo *= -1; // com uma multiplicao simples por (-1)

// exibe o percentual com base na posicao de impressao dentro de 80 colunas
// usando uma regra de 3 simples
gotoxy(1,15);
printf("Percentual: %.2f\% ", (float)(col * 100.0 / 80.0));

delay(50); // aguarda 50 milisegundos antes de executar o laco novamente
}
}

[/codebox]

Link to comment
Share on other sites

  • 0

Esse código não me deu uma luz,ele me deu um sol,obrigado mesmo cara.

Mas não ajudou muito no meu código

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

void main()
{
    char a;
    clrscr();
    printf("joguinho lecal :D, digite D pra  > e A pra <");
    printf("\n    ");
    printf(" >- ");
    inicio:
    a=getch();
    if(a=='a')
    {
    clrscr();
    printf("\n    ");
    printf("\n\n >-  ");
    }
    if(a=='d')
    {
    clrscr();
    printf("\n     ");
    printf("\n >-");
    }
    if(a=='w')
    {
    printf("o");
    }
    if(a=='s')
    {
    exit(0);
        }
    goto inicio;
}

Eu queria que o (o) andasse pra frente que nem sua seta , mas como eu sou iniciante eu não sei faser o (o) se mover,mesmo baseado no seu código.

AH,eu preciso de um limite onde o (o) volte pra posição inicial, invés de continuar para sempre

Edited by athoslive
Link to comment
Share on other sites

  • 0

- Não se compara string com sinal de "==", para isso use a função strcmp da biblioteca #include <ctype.h>.

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

int main() {

   char nome;

   printf("Digite uma letra .: ");
   scanf("%s",&nome);

   if(strchr("a",nome)!=0)
        printf("Acertou!\n");
   else
        printf("Errou!\n");
        
   system("pause");
   return 0;     
}

Edited by Binder
Link to comment
Share on other sites

  • 0

Olá Binder,

Concordo com você quando diz que não se compara strings com ==, mas no codigo athoslive ele está comparando bytes quando se usa o ' apostrofe.

Isso é perfeitamente valido ainda mais porque a variavel (a) é um char.

AthosLive, o problema do seu codigo é o seguinte.

Quando você simplesmente usa o printf ele vai exibir a informação na posição corrente da tela.

O \ n faz o cursor se move para a coluna 1 da proxima linha.

Se você quer fazer o seu ojbeto se mover você precisa indicar as coordernadas de impressao usando o gotoxy(col, linha) e ir mudando o valor de col;

Assim o printf vai respeitar as coordenadas que você definiu.

Pra andar pra frente é só fazer col++ e pra andar pra tras col-- dentro dos limites que você estabelecer.

Se ainda tiver duvidas é só falar.

Fica atento ao que o Binder falou, isso é importante pra se manipular texto. Inclusive você pode usar o toupper() ou tolower() pra tratar as letras digitadas independente de ser (s) ou (S).

Abs

Edited by CPP
Link to comment
Share on other sites

  • 0

Então se eu criar seta=gotoxy(2,2) ele coloca a seta na coluna2 linha 2 e ai eu mando imprimir certo? e se eu colocar col+=passo ele anda na velocidade do passo, mas quando eu fui fazer isto,ele só colocou um (o) na frente do outro toda a vez que eu clicava (w) envés de ir direto apagando o (o) atras dele.

e se ele for e der certo não vou poder fazer o (o) voltar a posição normal para atirar de novo ("o (o) é um tiro").Como soluciono estes problemas?

Link to comment
Share on other sites

  • 0

Pequeno engano.

a sequencia deve ser

col = 1;

gotoxy(col, 10); // pra posicionar na coluna 1 da linha 10

printf(" o"); // pra exibir nas coordenas estabelecidas pelo gotoxy

col++; // col passa a ser 2...3...4...e etc

Quando quiser retroceder é só fazer col--

Tenta ai, se não conseguir eu modifico seu codigo pra você ver como faz.

Abs

Edited by CPP
Link to comment
Share on other sites

  • 0

Mas isto que você me falou agora tem um problema, ele só anda a cada vez que eu aperto a tecla para ele ir,exemplo: a tecla é "w" para ele ir, eu aperto w e ele anda 1 casa, eu aperto w de novo e ele anda outra, e assim vai e fica enchendo minha tela de 'oooooooooooooooooooooooooooooo' para cada vez que eu aperto w.O que eu quero é que ele vá andando para a frente sozinho > até chegar no fim da tela, a cada vez que eu aperto 'w' e quando eu apertar 'w' que ele comesse do inicio e vá ate o fim da tela de novo sozinho.Entendeu? E Obg por toda a ajuda rs

Abs

Link to comment
Share on other sites

  • 0

Tenta estudar esse código.


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <ctype.h>

void main()
{
char a;
int col = 10;
clrscr();
printf("joguinho lecal :D, digite D pra > e A pra <");
printf("\n ");
printf(" >- ");
inicio:
if (kbhit())
a=tolower(getch());
if(a=='d')
{
gotoxy(col--, 2);
printf(" o \r");
if (col == 8)
a = ' ';
}
if(a=='a')
{
gotoxy(col++, 2);
printf(" o \r");
if (col == 30)
a = ' ';
}
if(a=='s')
{
exit(0);
}
delay(50);
goto inicio;
}
[/codebox]

Edited by CPP
Link to comment
Share on other sites

  • 0

Eu desenvolvi um código bem legal, mas tem um problema, quando eu atiro, o tiro fica preso la > e não quer voltar.Você sabe uma coisa amais que faça ele voltar?.

Código do que eu fis:

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <math.h>
#include <stdlib.h>

void main(void)
{
    unsigned char col = 10;  // atribui o valor da coluna iniciada
    unsigned char col2 =9;
    char passo = 1; // atribui o valor inicial para o passo
    char seta = '¯' - 1; // atribui o caracter para exibicao usando o codigo ascii
    char a;
    clrscr();
    inicio:
    a=getch();
    if(a=='w')
    {
    clrscr();
    printf(">-");
    }
    if(a=='s')
    {
    clrscr();
    printf("\n>-");
    }
        if(a=='d')
        {
        while(1){

        gotoxy(col++, 2);
        printf(" o \r", seta + passo);
        if(col==70 || col==10)
        {
        gotoxy(col--, 2);
        printf(" o \r");
        goto inicio;
        }
        delay(70);
        }
        }
        if(a=='e')
        {
        while(1){

        gotoxy(col++, 1);
        printf(" o \r", seta + passo);
        if(col==70 || col==10)
        {
        gotoxy(col--, 1);
        printf(" o \r");
        goto inicio;
        }
        delay(70);
        }
        }
        if(a=='q')
        exit(0);
    goto inicio;
}

Edited by athoslive
Link to comment
Share on other sites

  • 0

Athoslive,

Seu código tá bem confuso cara.

Tem goto dentro de while e if que não vai fazer exatamente o que você quer.

Alem do que printf(" o \r", seta + passo); está errado, já que você passou um parametro (seta + passo) sem nenhuma indicação de substituição na string.

Ou seja tá faltando algum "%<tipo>" dentro da string " o \r";

O problema acho que tá mais na lógica do que no uso da linguagem.

Mas vamos lá.


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <ctype.h>
void main()
{
char a;
int col = 10;
clrscr();
printf("joguinho lecal , digite D pra > e A pra <");
printf("\n ");
printf(" >- ");
inicio:
if (kbhit())
a=tolower(getch());
if(a=='d')
{
gotoxy(col--, 2);
printf(" o \r");
if (col == 8)
a = ' ';
}
if(a=='a')
{
gotoxy(col++, 2);
printf(" o \r");
if (col == 30)
a = ' ';
}
if (a=='e')
{
// escreva aqui seu codigo para o tiro

}
if(a=='s')
{
exit(0);
}
delay(50);
goto inicio;
}
[/codebox]

Link to comment
Share on other sites

  • 0

Mas ai que esta ! o (o) já é o tiro, eu quero que ele funcione como um bumerangue, que vá >>>> e volte <<<< enquanto minha nave sobe e desce.

E quanto aos erros,me desculpe,pois eu ainda estou fazendo curso de lógica de programação baseado em C,e estou tentando aprender amais do que eu sei aqui.O que eu estou tentando fazer é o (o) ir e voltar quando eu clico alguma tecla.

edit - 16:40 --------

terminei meu jogo de atirar com a nave,só falta os monstros.Ve se tem alguma falha,porque E-R vai e vem com o tiro D-F também,mas é na linha de baixo e W-S move a nave pra cima e para baixo. (Q fecha)

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <ctype.h>
void main()
{
    char a;
   int col = 10;
   clrscr();
   printf("joguinho legal , digite D-F para atirar embaixo / E-R para atirar emcima / W-S para subir e descer com a nave, e Q para sair");
   inicio:
   if (kbhit())
       a=tolower(getch());
   if(a=='d')
    {
      clrscr();
      printf("\n\n    >-");
      gotoxy(col--, 3);
      printf(" o \r");
      if (col == 8)
    a = ' ';
      }
   if(a=='f')
    {
      clrscr();
      printf("\n\n    >-");
      gotoxy(col++, 3);
      printf(" o \r");
      if (col == 70)
    a = ' ';
      }
   if (a=='e')
       {
      clrscr();
      printf("\n    >-");
      gotoxy(col--, 2);
      printf(" o \r");
      if (col == 8)
    a = ' ';
      }
   if(a=='r')
       {
      clrscr();
      printf("\n    >-");
      gotoxy(col++, 2);
      printf(" o \r");
      if (col == 70)
    a = ' ';
      }
   if(a=='w')
       {
      clrscr();
      printf("\n    >-");
      }
   if(a=='s')
    {
      clrscr();
      printf("\n\n    >-");
      }
   if(a=='q')
       {
      exit(0);
      }
   delay(50);
   goto inicio;
}

AAHH Outra coisa, me ensina para que serve o delay? xD Eu preciso dele para soltar as naves inimigas em tempos aleatórios se o delay servir para isto.

Edited by athoslive
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...