Ir para conteúdo
Fórum Script Brasil
  • 0

DUVIDAS (BÁSICO) EM C


athoslive

Pergunta

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 para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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

Editado por athoslive
Link para o comentário
Compartilhar em outros 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;     
}

Editado por Binder
Link para o comentário
Compartilhar em outros 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

Editado por CPP
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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

Editado por CPP
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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]

Editado por CPP
Link para o comentário
Compartilhar em outros 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;
}

Editado por athoslive
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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.

Editado por athoslive
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...