Re: Problema em leitura de caracteres para array de caracteres

    Inacabado
    Por Inacabado,
    1 hora atrás, HappyHippyHippo disse:

    - ao usares o formato de leitura " %c", o espaço executa o descartar de todos os caracteres considerados como espaço, logo o caracter '\n' nunca será lido.

    Tem logica, tem! O meu pensamento foi colocar o espaco para descartar o '\n' do printf anterior, por isso o " %c".

     

    1 hora atrás, HappyHippyHippo disse:

    - o retorno da função scanf não é o caracter lido, mas sim o número de elementos lidos em termos do formato dado, logo nunca pode ser usado como comparador com o caracter de fim de linha

    Completamente de acordo e eu ate sabia isso, mas ignorei! O retorno do scanf ou e 0 ou 1 neste caso especifico.

    1 hora atrás, HappyHippyHippo disse:

    - o segundo ciclo for, volta a ter problemas na condição de paragem

    Talvez porque ainda nao acrescentei o caracter terminador '\0' ao ultimo elemento do vector.

    Assim que possa vou alterar o codigo todo e torno a postar.

    Muito, muito obrigado pelo tempo e pela paciencia. Estou reconhecido da ajuda recebida, obrigado...

     

    p.s. Agora compreendo a questao da semantica do meu programa, estar completamente errada!

    • 12 respostas

    Re: Problema em leitura de caracteres para array de caracteres

    HappyHippyHippo
    Por HappyHippyHippo,

    ok ... estou a ver que o primeiro problema já te apercebeste, logo podemos seguir.

    sim, o problema inicial é na realidade a falta do ; no primeiro ciclo.

    agora ... existem vários outros problemas:

    - ao usares o formato de leitura " %c", o espaço executa o descartar de todos os caracteres considerados como espaço, logo o caracter '\n' nunca será lido.

    - o retorno da função scanf não é o caracter lido, mas sim o número de elementos lidos em termos do formato dado, logo nunca pode ser usado como comparador com o caracter de fim de linha

    - o segundo ciclo for, volta a ter problemas na condição de paragem

    • 12 respostas

    Re: Problema em leitura de caracteres para array de caracteres

    Inacabado
    Por Inacabado,
    3 horas atrás, HappyHippyHippo disse:

    e, lendo o código, que ciclo é esse ?

    Nao saiu ainda do ciclo for! Mas o ; no final ou a seguir ao ciclo for tambem nao me resolve o problema pois já testei.

    Nao terá algo a ver com o buffer do teclado? Se calhar estou a tentar fazer tudo ao mesmo tempo!

    3 horas atrás, HappyHippyHippo disse:

    (nota que as perguntas que são feitas são dicas sobre o problema)

    Eu compreendo isso, isto nao e um chat . Gostava era de perceber a lógica por detrás da falha, afim de nunca mais errar neste tipo de problemas e compreender os mecanismos, e sei bem que as perguntas que me fazes me podem conduzir a essa compreensão.

     

    Se calhar com getchar() resolvia o problema, mas no capitulo onde estou ainda nao foi apresentada essa funcao/macro por isso estou a resolver os exercicios so com a materia referente ao mesmo capitulo, e descuro outras maneiras de resolver o problema. Se calhar e uma pergunta no capitulo errado! Ja agora a pergunta e esta:

    "Write a program that reads in a line of input and then prints the line in reverse order.
    You can store the input in an array of char ; assume that the line is no longer than 255
    characters. Recall that you can use scanf() with the %c specifier to read a character at
    a time from input and that the newline character ( \n ) is generated when you press the
    Enter key."

     

    Presumo portanto que com as armas que tenho possa enfrentar o problema...

    • 12 respostas

    Re: Procurar nos em arvores binarias

    flistergod
    Por flistergod,

    assim ? 

    private No procurarRec( No raiz, String procurado ){
            if( raiz == null || raiz.oElemento.startsWith(procurado ))
            return raiz;
            
            if( procurado.compareTo( raiz.oElemento)>0 )
            return procurarRec( raiz.dir, procurado);
            else
            return procurarRec( raiz.esq, procurado);
            }

    • 4 respostas

    Re: Procurar nos em arvores binarias

    HappyHippyHippo
    Por HappyHippyHippo,
    19 hours ago, HappyHippyHippo said:

    - já ouviste falar de funções recursivas ?

     

    • 4 respostas

    Re: Problema em leitura de caracteres para array de caracteres

    HappyHippyHippo
    Por HappyHippyHippo,

    e, lendo o código, que ciclo é esse ?

    (nota que as perguntas que são feitas são dicas sobre o problema)

    • 12 respostas

    Re: Procurar nos em arvores binarias

    flistergod
    Por flistergod,

    e como poderia fazer isso?

    • 4 respostas

    Re: Alternativas ao Google AdSense

    brunuu
    Por brunuu,

    Eu tentei o propellerads que até parece decente e recomendam muito mas o problema é que agora já não tem publicidade por banners ou caixas só tem pop ups e isso é nojento 

    • 19 respostas

    Re: Problema em leitura de caracteres para array de caracteres

    Inacabado
    Por Inacabado,
    3 horas atrás, HappyHippyHippo disse:

    para o código actual, é irrelevante o que vais futuramente fazer com ele. o que me interessa é o que é apresentado e mais nada

    Em programação, a semântica é o que o programa faz, logo, se o programa não faz o que devia, então tem problemas de semântica. Não interessa como o faz, mas terá de fazer o pretendido.

    também eu queria que fizesse isso, mas não faz, e a razão está na dica que te dei. Vou-te dar uma ajuda de uma maneira diferente. Vou alterar o código tendo duas coisas em conta:

    - vou inicializar a memória da variável line a zeros de forma a não ser necessário a linha 11

    - ao não ser necessário a linha 11, vou remover-la:

    
    #include <stdio.h>
    int main(void)
    {
      const int MAX=255;
      int i;
      char line[MAX] = {0};
      printf("Please enter a line of text:\n");
      for(i=0;scanf(" %c",&line[i])!='\n';i++)
    
      printf("Saimos do ciclo while.\nvalores no array:\n");
      for(i=0;i!='\0';i++)
        printf("%c",line[i]);
      printf("Bye!!!\n");
    
      return 0;
    }

    agora corre isso e diz o que aparece

    Diz que a variável nao pode ser inicializada! Lembrei-me que haveria qualquer problema ao inicializar variaveis se usasse-mos uma variavel const. Mudei para o define assim:

    #define MAX 255

    e logo que carrego no enter tem um comportamento inusual, pois repete o printf seguinte tantas vezes quantas as letras que insira no scanf do ciclo for que estamos a debater.

    • 12 respostas

    Re: Jogo de Tabuleiro

    Mata998
    Por Mata998,

    Consegui o que queria,muito obrigado pelas suas dicas,agora vou tentar solucionar os restantes objetivos que tenho em mente.

    • 12 respostas

    Re: Jogo de Tabuleiro

    HappyHippyHippo
    Por HappyHippyHippo,
    1 hour ago, Mata998 said:

    Como eu ja tenho uma funçao que imprime a tal matriz ("DrawBoard"), queria fazer algo assim: int CGame::SaveNome(){
        
      ofstream myfile;
      myfile.open ("jogadas.txt");
      myfile << DrawBoard();
      myfile.close();
        
    }

    Isto é,utilizar a funçao que ja existe,  que imprime a matriz na linha de comandos(sob forma de caracteres), e leva-la a imprimir a mesma matriz para o ficheiro ".txt",se é que isso é possivel desta maneira.

    sim é possivel. o que tens de fazer:

    - copiar o código da apresentar a matriz para uma outra função

    - alterar os argumentos para aceitar a stream para onde irás escrever a matriz

    - alterar a função original para chamar a função criada e dar-lhe a stream padrão de saida (cout)

    - criar uma terceira função que irá abrir a stream de ficheiro onde vais gravar a matriz, hamar a função criada inicialmente, e depois fechar a sream-

    • 12 respostas

    Re: Jogo de Tabuleiro

    Mata998
    Por Mata998,

    Como eu ja tenho uma funçao que imprime a tal matriz ("DrawBoard"), queria fazer algo assim: int CGame::SaveNome(){
        
      ofstream myfile;
      myfile.open ("jogadas.txt");
      myfile << DrawBoard();
      myfile.close();
        
    }

    Isto é,utilizar a funçao que ja existe,  que imprime a matriz na linha de comandos(sob forma de caracteres), e leva-la a imprimir a mesma matriz para o ficheiro ".txt",se é que isso é possivel desta maneira.

    • 12 respostas

    Re: Jogo de Tabuleiro

    HappyHippyHippo
    Por HappyHippyHippo,

    prontos, se então um tabuleiro é somente ma matriz de caracteres, então o que necessitas de gravar não é mais do que um conjunto de caracteres.

    para isso podes facilmente usar a classe ofstream e mandar escrever os caracteres que pretendes.

    tenta fazer isso e se alguma dúvida aparecer, diz

    • 12 respostas

    Re: Problema em leitura de caracteres para array de caracteres

    HappyHippyHippo
    Por HappyHippyHippo,
    10 hours ago, Inacabado said:

    Ja previa que se fosse perguntar pela linha no. 11, mas devo esclarecer que este e um programa que tenho em teste, para fazer parte de um programa maior que no caso e inverter uma string. por isso o

    
    line[i]='\0';

    esta um pouco fora de contexto, pois fui testar esta porção do código noutro ficheiro.c.

    para o código actual, é irrelevante o que vais futuramente fazer com ele. o que me interessa é o que é apresentado e mais nada

    10 hours ago, Inacabado said:

    A semântica e um pouco como os gostos, cada um tem o seu, e eu como gosto de "elegancias" tenho a tendência para parecer um pouco críptico para quem le o meu código. Gostos...

    Em programação, a semântica é o que o programa faz, logo, se o programa não faz o que devia, então tem problemas de semântica. Não interessa como o faz, mas terá de fazer o pretendido.

    10 hours ago, Inacabado said:

    Respondendo a tua pergunta

    Acho que e auto-explanatório: insere um caracter no array line, ate encontrar uma new line \n!

    também eu queria que fizesse isso, mas não faz, e a razão está na dica que te dei. Vou-te dar uma ajuda de uma maneira diferente. Vou alterar o código tendo duas coisas em conta:

    - vou inicializar a memória da variável line a zeros de forma a não ser necessário a linha 11

    - ao não ser necessário a linha 11, vou remover-la:

    #include <stdio.h>
    int main(void)
    {
      const int MAX=255;
      int i;
      char line[MAX] = {0};
      printf("Please enter a line of text:\n");
      for(i=0;scanf(" %c",&line[i])!='\n';i++)
    
      printf("Saimos do ciclo while.\nvalores no array:\n");
      for(i=0;i!='\0';i++)
        printf("%c",line[i]);
      printf("Bye!!!\n");
    
      return 0;
    }

    agora corre isso e diz o que aparece

    • 12 respostas

    Re: Jogo de Tabuleiro

    Mata998
    Por Mata998,

    um tabuleiro neste caso,é uma matriz que eu represento na linha de comandos recorrendo a caracteres que representam as peças do jogo. Á medida que se efetua uma jogada,nao sendo um metodo por assim se dizer:grafico, o programa vai enumerando tantas matrizes quantas jogadas forem efetuadas sucessivamente ate o jogo terminar.

    Nao sei se fui suficientemente claro.

    • 12 respostas

    Re: Problema em leitura de caracteres para array de caracteres

    Inacabado
    Por Inacabado,

    Acabei de testar desta maneira:

      6         const int MAX=255;
      7         int i=0;
      8         char ch, line[MAX];
      9         printf("Please enter a line of text:\n");
     10         while(scanf("%c",&ch)!='\n')
     11         {
     12                 line[i]=ch;
     13                 i++; 
     14         }

    E continua a nao me sair do ciclo... Mas devo dizer que ja testei de muitas outras maneiras, tem sido 2 dias (pos-laboral) que nao me sai nada!

    • 12 respostas

    Re: Problema em leitura de caracteres para array de caracteres

    Inacabado
    Por Inacabado,

    Ja previa que se fosse perguntar pela linha no. 11, mas devo esclarecer que este e um programa que tenho em teste, para fazer parte de um programa maior que no caso e inverter uma string. por isso o

    line[i]='\0';

    esta um pouco fora de contexto, pois fui testar esta porção do código noutro ficheiro.c.

    A semântica e um pouco como os gostos, cada um tem o seu, e eu como gosto de "elegancias" tenho a tendência para parecer um pouco críptico para quem le o meu código. Gostos...

    Respondendo a tua pergunta

    16 minutos atrás, HappyHippyHippo disse:

    ora vamos lá ver o que fazem estas duas linhas :

    
      9         for(i=0;scanf(" %c",&line[i])!='\n';i++)
     10                 
     11         line[i]='\0'; 

     

    Acho que e auto-explanatório: insere um caracter no array line, ate encontrar uma new line \n!

    Mas devo dizer que ja testei de outra forma com o while assim:

     10         while(scanf("%c",&line[i])!='\0')
     11         {
     12                 i++;
     13         }

     

    • 12 respostas

    Re: Jogo de Tabuleiro

    HappyHippyHippo
    Por HappyHippyHippo,

    o que é "um tabuleiro" ?

    • 12 respostas

    Re: Alternativas ao Google AdSense

    brunuu
    Por brunuu,
    3 horas atrás, bruno1234 disse:

    Experimenta ver este link: https://support.google.com/adsense/answer/1705831?hl=en

    Como é um jogo deve precisar de algo diferente.

    Esse não dá também, porque o jogo é na página toda, esse tipo de publicidade da google é tipo num video antes do jogo começar 

    • 19 respostas

    Re: Jogo de Tabuleiro

    Mata998
    Por Mata998,

    Podes ser mais explicito nas questoes?

    • 12 respostas

  1. Ver Mais Actividade
Portal by DevFuse · Based on IP.Board Portal by IPS