Ir para conteúdo
Fórum Script Brasil

vangodp

Membros
  • Total de itens

    883
  • Registro em

  • Última visita

Respostas em Status postados por vangodp

  1. Oi.

    Tenho uma duvida sobre um post seu (a saber: 

    ). Sou iniciante em programação e gostaria de saber o porque do uso do número 1 entre a porcentagem e o d(Ex: %1d). Além disso tenho dúvidas sobre o "*c", testei o código com e sem ele e deu o mesmo resultado.

    Ps: O código funcionou bem, minha dúvida é o porque de ter funcionado. rs

    Desde já agradeço a atenção.

    Hiago Couto, 2017

     

    1. vangodp

      vangodp

      Sobre o %1d, para isso você deve entender primeiro o comportamento que tem %d.
      O especificador %d Lê um inteiro que vai desde −32,767 até +32,767, então como naquele caso que você indica, ele quer digitar por exemplo, "1234", e quer que o 1 fique na primeira variável, o 2 na segunda, o 3 na terceira e assim por diante. Ele quer separar um numero de 4 cifras em 4 unidades e atribuir uma unidade a cada variável, sendo 4 neste caso. Porem se ele digitar 1234, como vai saber o programa se tem que guardar 1234 na primeira? Ou 1 na primeira e o resto na segunda? Ou um em cada uma? Com %1d se ele digitar 1234, e somente o 1 vai parar na primeira, se fosse %2d iria a parar um 12 na primeira e o resto dependeria do tipo de especificador que vier em seguida.

      Um especificador não é exatamente uma coisa fixa. Por exemplo o especificador %s poderia aparecer como %24s, %*s, %.10s etc etc. Em teoria um especificador pode estar composto por estas partes:
      %[flags][width][.precision][length]specifier 
      Para saber o que significa tudo isso entre aqui:
      Especificadores para printf: http://www.cplusplus.com/reference/cstdio/printf/
      Especificadores para scanf:http://www.cplusplus.com/reference/cstdio/scanf/
      Especificadores para fprintf:http://www.cplusplus.com/reference/cstdio/fprintf/
      Especificadores para fscanf:http://www.cplusplus.com/reference/cstdio/fscanf/

      Teria alguns outros como sscanf, sprintf, etc. Não são iguais os especificadores entre diferentes funções. Poderia até ser igual porem ter diferentes finalidades em diferentes funções.

      Procure praticar bastante com os especificadores. Busque em internet.

       

    2. (Veja2 outras resppostas para esta atualização de status)

  2. Oi.

    Tenho uma duvida sobre um post seu (a saber: 

    ). Sou iniciante em programação e gostaria de saber o porque do uso do número 1 entre a porcentagem e o d(Ex: %1d). Além disso tenho dúvidas sobre o "*c", testei o código com e sem ele e deu o mesmo resultado.

    Ps: O código funcionou bem, minha dúvida é o porque de ter funcionado. rs

    Desde já agradeço a atenção.

    Hiago Couto, 2017

     

    1. vangodp

      vangodp

      Enter é considerado um char, igual que outros tantos, '1', 'a', ' ', '\t', '\0', etc. O enter é o '\n'.
      Quando seu programa chegar em um scanf que estiver pedindo um char ou uma string, você irá digitar o que se pede, ato seguido você digitará enter('\n') para indicar que já terminou de entrar com os dados, esse é exatamente o problema. Tudo o que digitamos vai parar no buffer de entrada. Se temos por exemplo que ler 2 chars consecutivos teríamos algo como isso:
      char a;
      char b;
      scanf("%c", &a);
      scanf("%c", &b);

      quando o programa chegar no primeiro scanf o programa vai se deter para esperar que você digite o valor da variável a, você irá digitar um char qualquer e pulsar enter, 2 pelo preço de 1 >_<, ao buffer irá parar "x\n", ou seja x mais o \n, dai o programa espera um char, que é o a, dai a = 'x', x sai do buffer e vai parar no a, agora no buffer tem ainda o \n, como falei \n é um char, porem é um char que não imprime nada, faz um salto de linha, dai b = '\n', O enter vai parar no b, o programa não vai se deter, vai atribuir os 2 chars que estiverem no buffer nas seguintes 2 variáveis do tipo char ou string que aparecerem, até que o buffer permaneça vazio. Resumindo... no primeiro scanf você digitaria um char e pulsaria enter, o enter iria parar ao buffer junto com a letra que você deseja, e a partir desse momento o enter causaria erros no seu programa, você teria o que conhecemos por "lixo" no buffer.

      Existem varias formas de se abordar esse problema, mas basicamente todas se dividem em 2 formas, uma é "ignorar" a letra que não é desejada que é o caso do %*c, e outra é ler os valores do buffer até ele estar vazio antes de fazer uso dele novamente.

      O especificador de formato %*c é o contrario de %c, se o %c lê um char, o especificador %*c o ignora, então quando tiver %c seguido de %*c quer dizer que você está lendo um char e ignorando outro, porque como falei na hora de entrar com um char você digita uma letra e aperta enter, isso na realidade são 2 letras, então %c%*c lê uma e ignora a outra.

      As outras formas são limpando o buffer, existem varias maneiras de se fazer isso.
      Alguns livros recomendam você usar o fflush(stdin) mas não é uma boa pratica pois fflush foi criado para ser usado com stdout(buffer de saída padrão) e não com o stdin(buffer de entrada padrão), o fato que funcione é pura sorte, mas pode gerar erros muito difíceis de encontrar.

      A melhor forma de esvaziar o buffer é ler tudo o que estiver nele. Por exemplo se eu usar o getchar eu retiro uma letra do buffer, se eu jogar essa letra em uma variável que não irei usar não importa muito. Essa função que lhe irei deixar aqui esvazia todas as letras que estiverem no buffer, é só chamar ela depois de cada leitura. Use ela sempre antes de ler um char ou uma string e seu programa nunca terá erros.

      //funcion que vacia el buffer
      void flush_in() {
          int ch;
          
          while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}
      }


      Um exemplo de uso poderia ser esse:

      /funcion que vacia el buffer
      void flush_in() {
          int ch;
          
          while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}
      }
      
      int main () {
      
          char a, b;
          
          printf ( "Entre a primeira letra" );
          scanf ( "%c", &a );
          //flush_in();
          
          
          printf ( "Entre a segunda letra" );
          scanf ( "%c", &b );
          
          
          printf ( "\n\nPrimera: %c \nSegunda: %c", a, b );
          
          getchar();
          return 0;
      }

      O programa dará erro, você não será capaz de ler o segundo char, porem se tirar o comentário de adiante da função flush_in() antes de ler o segundo char você verá que o programa não dará erros, pois o buffer estará limpo antes de ler o segundo char.

      Provavelmente essa seja a melhor forma de limpar o buffer que exista. A outra é ignorando o char que causa o erro, se não entrar ao buffer chars indesejados não há motivo para limpar.

      Busque mais informação de como limpar o buffer em C, ou lixo no buffer, erros de entrada em C, etc. Faça muita leitura para entender.

       

    2. (Veja2 outras resppostas para esta atualização de status)

  3. Olá, sobre a vaga. Qual a sua experiencia com C/C++? 

    1. vangodp

      vangodp

      Meu nome é Evandro.

      Na realidade sou natural de São Paulo(Tatuapé), mas tenho dupla nacionalidade(brasileiro/española).

      Realmente não faço planos para voltar, mas quem sabe. Já não tenho residência em SP, se der o caso teria que buscar um local. O mais próximo que conheço de onde comentas é Osasco, tenho um conhecido que mora lá.

      Voltar para o Brasil não é o problema... o problema é que não tenho nada fixo, então esse é o problema maior. Outro problema é, como falei, a falta de experiência. Imagine que chegue a voltar para Brasil... Se esse projeto não der certo terei muitos problemas. Realmente esse é o problema.

      Fale mais sobre o projeto se for possível. De todas formas estou perguntando a uns quantos companheiros que são programadores lá do forum se desejam entrar em contato contigo. Temos um chat grupal no discord no qual usamos para trocar idéias entre programadores e estudantes... se desejar, entre no discord, por se tiver alguma duvida, mesmo que não trabalhamos juntos, pode que consigas ajuda em caso precisar, sempre e quando for sobre C/C++, ou pode que outros linguagens também. O link é esse: https://discord.gg/CtfUywV

    2. (Veja5 outras resppostas para esta atualização de status)

  4. Olá, sobre a vaga. Qual a sua experiencia com C/C++? 

    1. vangodp

      vangodp

      Muito obrigado pela consideração. Eu sou nativo de São Paulo, porem levo vivendo em España muitos anos... dezesseis para ser mais exato.

      Sobre o projeto, parece muito interessante o tema sobre TEF. Ao dar uma investigada, ao parecer os dispositivos do tipo POS são aqueles que geralmente vem com tudo dentro, é dizer, passamos o cartão e a própria maquina faz a gestão e imprime os recibos, e trabalha independente do computador. Já o sistema TEF a maquina atua como um "scaner" do cartão, passando os dados para um computador, e se fosse o caso, para imprimir, deveríamos ter a impressora equivalente. Esse sistema permite ao dono construir aplicações mais flexíveis. Me engano? Provavelmente o provedor do hardware proveria algum soft ou bibliotecas para comunicar o hard com o soft. Seria interessante participar em algum projeto como esse, mas enfim... é um pouco complicado realmente se vivo longe demais para isso.

      Sobre se tenho interesse pode se dizer que sim... mas como falei não tenho experiência profissional, é muito difícil encontrar um trabalho se não há como demonstrar um nível, mesmo que você seja bom no que faz as empresas preferem o tal curriculum, diplomas etc etc. É gracioso que ajudo a dezenas de pessoas a tirar seu diploma porem jamais terei um.

      Em fim... boa sorte, espero que encontre um bom profissional. Vou indicar a proposta para uns quantos conhecidos que vivem por aí, pois conheço programadores por todas as partes do globo heheh, se interessar a algum entrarão em contato contigo. Fique com Deus.


       

    2. (Veja5 outras resppostas para esta atualização de status)

  5. Olá, sobre a vaga. Qual a sua experiencia com C/C++? 

    1. vangodp

      vangodp

      Olá!
      Eu moro em Espanha. Nunca trabalhei para nenhuma empresa pelo qual não tenho experiência demonstrada. Estudo C e C++ mais como hobby, faço isso já a alguns anos. Realmente meu curriculum não é grande coisa, minhas qualidades são falar português e español fluidos, e um inglês bem básico. E por suposto me desenvolvo com bastante soltura nos linguagens C e C++ estandartes. Infelizmente não sei o que é TEF mas estou sempre disposto a aprender novas coisas. Acho que isso é tudo.

    2. (Veja5 outras resppostas para esta atualização de status)

  6. Amigo eu sei que é abusar da sua bondade mais se tiver como dar uma olhada nesses codigo é bem simples mais não consigo edentificar o erro

    Ficarei muito feliz se me ajudar , serio voce não sabe quanto ajuda

    imagem.JPG

    1. vangodp

      vangodp

      não vi o mensagem, não costumo entrar no meu perfil. O problema provavelmente é devido a que você n4ao pode por o nome em uma variavel de um numero. Fica algo sem sentido fazer int 1 = 1; ou int 1= 2; e ainda pior se 1 = 2 de depois você tentar fazer if (1==1) sendo que 1 vale 2 e nem fica claro se é o da direita ou o da esquerda. Un nome valido seria n1 ou até int _1=1;

      Se quiser saber mais entre no discord https://discord.gg/CtfUywV

  7. Olá, você poderia me ajudar? Fiz em C um programa de multiplicação de matrizes de ordem 1000 A e B, que resulta em uma matriz C, só que agora eu tenho que adicionar threads e não sei aonde coloca-las. Eu preciso de 4 threads: 1 vai calcular de 0 à 249; 2 vai calcular de 250 à 499; 3 vai calcular de 500 à 749; 4 vai calcular de 750 à 999;

    Tenho o arquivo aqui, qualquer coisa te mando...

    1. vangodp

      vangodp

      2 matrizes de 1000? Não será vetores de 1000?
      Abra um tema para poder ser respondido. Lembre que isso é um fórum, as respostas servem de consulta para outros usuários. Não há nada de mal em pedir ajuda por correio, mas a resposta será dada no fórum. Quando quiser pedir ajuda a um usuário em concreto abra um tema, exponha seu problema e mande um email indicando o link da sua consulta.

    2. (Veja1 outra respposta para esta atualização de status)

×
×
  • Criar Novo...