Jump to content
  1. Re: comparar input com array de strings

    thoga31
    By thoga31,

    Algumas notas:

    • Não se deve usar scanf() para a obtenção de strings de input, mas sim fgets();
    • A string obtida do input pode conter o caracter \n do Enter premido;
    • Deve-se evitar o uso de variáveis globais sempre que possível;
    • A variável input só prevê a existência de 5 caracteres na string, incluindo o caracter terminal \0; o espaço alocado deve ser maior;
    • O uso de caracteres não ASCII pode levar a comportamentos indefinidos por parte do programa.

    Sugestão de código (testado)

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define QTD  5    // Número de strings a ler
    #define MAX 10    // Tamanho máximo de cada string, incluindo o caracter terminal
    
    char *colors[] = {
        "green",
        "red",
        "blue",
        "yellow",
        "brown",
        "white",
        "black"
    };
    
    const int DIM = sizeof(colors) / sizeof(colors[0]);   // Dimensão do vetor de cores
    
    /* Verifica se a string pertence ao vetor de cores */
    int check(char *s) {
        // Elimina o '\n' que o fgets costuma apanhar na leitura
        if (s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = '\0';
        
        for (int i = 0; i < DIM; i++)
            if (strcmp(s, colors[i]) == 0)
                return 1;
        return 0;
    }
    
    int main(void) {
        char line[MAX];        // Temporário
        char valid[QTD][MAX];  // Vetor com strings finais válidas
        int count = 0;         // Contador de strings válidas lidas
        
        /* Obtém a string, verifica se é válida, e copia para o vetor de resultado caso seja */
        for (int i = 0; i < QTD; i++) {
            fgets(line, MAX, stdin);
            if (check(line)) {
                strcpy(valid[count], line);
                count++;
            }
        }
        
        /* Faz output do vetor final */
        printf("Foram identificadas %d strings válidas:\n", count);
        for (int i = 0; i < count; i++)
            printf("%s\n", valid[i]);
        
        return 0;
    }

     

    Cumprimentos.

    • 4 replies
  2. Re: Utilizar Webservices da AT

    Reboot
    By Reboot,

    Alguem sabe cmo configurar o certificado de testes da AT no SOAP UI de modo a poder testar os webservices da AT?

    • 10,042 replies
  3. Re: Utilizar Webservices da AT

    Pedro Almeida
    By Pedro Almeida,

    Boa tarde.

     

    Alguem continuar com problemas na submissão de ficheiros via Webservice?


    Continuo a ter o erro

    Exception in thread "main" gL: Serviço temporáriamente indisponível. Por favor tente mais tarde.
    at oP.a(Unknown Source)
    at pt.at.factemicli.cmdProcessor.FactemicliCmdClient.main(Unknown Source)

     

    Validei as regras de firewall e o trafego já está a passar para o novo Ip publico 62.28.254.198.

     

    Obrigado,

    • 10,042 replies
  4. Re: Utilizar Webservices da AT

    spires
    By spires,

    O nosso problema são as comunicações de PDA por wifi e a comunicação é por ftp.

    • 10,042 replies
  5. Re: Utilizar Webservices da AT

    Elio_Mota
    By Elio_Mota,
    5 hours ago, spires said:

    Estamos a ter problemas de comunicação com o pedido de código AT à AT. Alguma informação adicional sobre este problema?

    Eu também tenho um cliente com windows server 2008 que desde 30-11-2021 que não consegue comunicar guias!!!
    Alguém tem alguma ideia do que se possa passar??
    Alguem sabe se o certificado: 
    ANF AC Server CA (que por acaso expirou no dia 30-11 poderá estar relacionado?)

    • 10,042 replies
  6. Re: Utilizar Webservices da AT

    spires
    By spires,

    A comunicação com a AT continua a dar o erro: 100353 (connection lost). A comunicação é feita por WIFI. Alguma ideia?

    • 10,042 replies
  7. Re: Utilizar Webservices da AT

    tiago.f
    By tiago.f,
    1 hour ago, Reboot said:

    Tens razão, não sei pq mas é diferente...
    RND_KEY=`echo -n $KEY_HEX | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'`
    echo $RND_KEY    
    U_§ó9æ q         
             Tl¯³Í   

    echo -n $KEY_HEX | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'
    U_§ó9æ q                                                          
             Tl¯³Í $                                                  

     

    Parece-me que é por causa do -n que falta no echo $RND_KEY.

    ... e como tu fazes echo -n $RND_KEY | openssl rsautl -encrypt -pubin -inkey $PUB_KEY  | openssl enc -base64

    é provável que não esteja aqui a origem do teu erro....mas experimenta.

    • 10,042 replies
  8. Re: Utilizar Webservices da AT

    Reboot
    By Reboot,
    1 hora atrás, tiago.f disse:

    Oi @Reboot

    - o comando datarea que não conheço...

    - a linha que define a PUB_KEY está comentada. Não sei se a estás a definir antes ou não..

    - o teu comando de perl dá-me um resultado diferente (não me perguntes porquê). Repara que no 2º (o teu) falta o % no final do resultado.

    ~
     echo -n $KEY_HEX | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'
    ��tE\�i�]��%
    
    ~
     RND_KEY=`echo -n $KEY_HEX | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'`
    
    ~
     echo $RND_KEY
    ��tE\�i�]��

    Talvez faça diferença...?

    e talvez tenha havido em 2013 uma razão por eu ter colocado o resultado num ficheiro e não numa var de ambiente

    Tens razão, não sei pq mas é diferente...
    RND_KEY=`echo -n $KEY_HEX | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'`
    echo $RND_KEY    
    U_§ó9æ q         
             Tl¯³Í   

    echo -n $KEY_HEX | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'
    U_§ó9æ q                                                          
             Tl¯³Í $                                                  

     

    • 10,042 replies
  1. Load more activity
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.