Ir ao conteúdo
  • Cadastre-se

Ansi C

Membro Pleno
  • Posts

    3.302
  • Cadastrado em

  • Última visita

posts postados por Ansi C

  1. Em 20/04/2023 às 14:23, bngomes disse:

    não tem como saber a quantidade primeiro pra depois imprimir o nome... a não ser que voce crie um segundo array com os indices do que passaram do peso e depois desse o print desse array

     

                                                                                                                   MATRIZES

    Também pensei isso!

     

    Declarar o arranjo onde o comprimento e os elementos são, respectivamente, a

    quantia e os índices doutro; conforme um ou mais filtros e/ou requisitos.

     

    Expresso:

    Indice grupo_acima_da_media[PACIENTE], incluir = 0;
    for (Indice paciente = 0 ; paciente < PACIENTE ; ++paciente)
       if (dados[paciente].peso > media)
          grupo_acima_da_media[incluir] = paciente ,
          ++incluir;

     

    • Curtir 1
  2. Bom dia,

     

            Tem-se, aparentemente, aqui soluções em que todas me inspiram uma

    ordenação crescente dos segmentos (a, b e c). Com isso determinar o

    segundo maior segmento (b) e o primeiro (a) e o menor (c), todos maiores

    que 0.

     

    Logo, se há condição para a existência de um triangulo retângulo, então

    a² == b² + c² será verdade, em seguida:

    b altura

    c base

    Area = (1/2)cb

    • Curtir 1
  3. 1#

    Em 14/05/2024 às 23:38, devair1010 disse:
    typedef struct
    {
      int  sequencial;
      char nome    [30];
      char email   [30];
      ///long int telefone; /// esse nUmero gigante não servirAh para nada
      char telefone[15];    /// melhor que seja string
    } ContatoProfissional;
    
    ContatoProfissional Contato;
    

     

    #2

    Em 14/05/2024 às 23:38, devair1010 disse:
    fgets(Contato.nome, 50, stdin);
    Contato.nome[strlen(Contato.nome)-1] = 0;/// remove o newLine pego por fgets
    

     

    No #1 recorte, há declaração dum dado composto e uma variável deste dado. O

    dado composto tem 4 campos, um deles é o nome do tipo char [30]: um arranjo

    com capacidade para 30x caracteres.

     

    Em seguida, @devair1010, expressa-se, no segundo argumento da função

    fgets, como se aquele campo fosse para 50x caracteres. E mais abaixo ainda no

    #2 recorte, insinua-me que não conhece a capacidade do nome ao utilizar

    'strlen' para determinar o tamanho de sua string.


    😄 

    *** Capacidade é de 30x 

    Curiosamente, reforça o caso do autor da pergunta, que também expressa

    variáveis além da definição.

     

  4. Em 14/05/2024 às 23:38, devair1010 disse:

    está lendo dois blocos e sendo que no "fwrite" gravou apenas um bloco de cada vez

    É isso ai; ela acessa 2 variáveis a partir do endereço de somente uma.

     

     

    Em 14/05/2024 às 18:41, higor7 disse:
    	ContatoProfissional LerContatos;
    	FILE *arquivoContatos = fopen("contatos.dat", "rb");
    
    	if (arquivoContatos)
    	{
    		while (fread(&LerContatos, sizeof(Contato), 2, arquivoContatos))

     

     

    Erro no Fread que imprimi de um arquivo apenas um contato é não o restante

    Por que o programa encerra logo em seguida?

     

    Olhe lá, declarou-se LerContatos, sendo 1x ContatoProfissional, depois, expressa-se nos argumentos 2x, assim a fread escreve 1x variável além da definição; escreve em bytes indefinidos ou definidos, porém não para essa operação.

     

    ERRO NA DIGITACAO 🙂

    • Obrigado 1
  5. 3 horas atrás, arfneto disse:

    Ativar todos os alertas ou mesmo tratar qualquer alerta como erro é interessante numa primeira compilação ou se sua empresa ou escola assim exige, mas não é essencial. Um erro é um erro e não gera código algum. Variável não declarada é um erro.

     

    E daí? Ative todos os alerta e se dê a oportunidade de aprender com eles!

    ISSO É BOM!

     

    A propósito, aquela programação não compilou.  

    a.c: In function main’:
    a.c:2:14: error: parâmetro não utilizado argc [-Werror=unused-parameter]
        2 | int main(int argc, char* argv[])
          |          ~~~~^~~~
    a.c:2:26: error: parâmetro não utilizado argv [-Werror=unused-parameter]
        2 | int main(int argc, char* argv[])
          |                    ~~~~~~^~~~~~
    cc1: todos os avisos sendo tratados como erros

     

    • Curtir 1
  6. Bom dia,

     

            Essa programação não compilou!

    ...

    a.c: Na função 'main':
    a.c:48:23: erro: 'b' não declarado (primeiro uso nesta função)
       48 | if(C>A && C>b)
          |             ^
    a.c:48:23: nota: cada identificador não declarado é relatado apenas uma vez para cada função em que aparece
    a.c:9:14: erro: parâmetro não utilizado 'argc' [-Werror=unused-parameter]
        9 | int main(int argc, char* argv[] )
          |          ~~~~^~~~
    a.c:9:26: erro: parâmetro não utilizado 'argv' [-Werror=unused-parameter]
        9 | int main(int argc, char* argv[] )
          |                    ~~~~~~^~~~~~
    cc1: todos os avisos sendo tratados como erros

    c11 - gcc11.4

    • Obrigado 1
  7. Agora 😄 não mais ... o programminha compila!

    codigo_em_C_esta_apresentando_alguns_erros_quando_tento_compila-lo.c

    /*                               EXERCICIO
     ---------------------------------------------------------------------------
    */#include <stdio.h>
      #define PACIENTE 0x1
      struct Paciente
         {
          char    nome[30];
          float   peso;
         };
      int
      main (void)
      {
       float media = 0;
       unsigned cant = 0;
       struct Paciente grupo[PACIENTE];
       for (unsigned paciente = 0 ; paciente<PACIENTE ; ++paciente)
          {
           printf ("\nNome: ");
           gets ((grupo + paciente)->nome);
           printf("\nPeso: ");
           scanf ("%f",&(grupo + paciente)->peso);
           media += (grupo + paciente)->peso;
          }
       media = media / PACIENTE;
       for (unsigned paciente = 0 ; paciente<PACIENTE ; ++paciente)
          if((grupo + paciente)->peso > media)
             {
              printf("%s está acima do peso médio\n", (grupo + paciente)->nome);
              ++cant;
             }
       printf("%d pessoas estão acima do peso médio", cant);
      }

    c'11 - gcc'11.4

    • Curtir 1
  8. Sistema de Numeração Decimal

                                           ^

       + neste estilo - - - - (±9999)

        |

    %d 

       ^~~ especificamente para converter inteiro de base10.

     

    . . . . . . . . . . . . . . . .

    0 1 2 3 4 5 6 7 8 9 | 

    ´´´´´´´´´´´´´´´´´´´´´´´´´´

    • Curtir 1
  9. Boa dia!

     

    Quando essa pergunta aconteceu ninguém recomendou ativas todos os alertas do compilador:

    a.c: In function main’:
    a.c:13:10: parênteses em torno da comparação no operando de ‘&’ [-Werror=parentheses]
       13 |    if (A < (B+C) & B < (A+C) & C < (A+B))
          |        ~~^~~~~~~
    a.c:13:34: erro: sugira parênteses em torno da comparação no operando de ‘&’ [-Werror=parentheses]
       13 |    if (A < (B+C) & B < (A+C) & C < (A+B))
          |                                ~~^~~~~~~
    a.c:15:12: erro: sugira parênteses em torno da comparação no operando de ‘&’ [-Werror=parentheses]
       15 |       if (A==B & B==C)
          |           ~^~~
    a.c:17:10: erro: ‘área não declarada (primeiro uso nesta função)
       17 |          area=(B*C)/2;
          |          ^~~~
    a.c:17:10:nota: cada identificador não declarado é relatado apenas uma vez para cada função em que aparece 

     

    A,B e C são flutuantes (float)***

    area não existe!***

     

    Com essas correções, o programminha compilou

    Leia-os-3-lados-de-um-triângulo-retângulo-e-imprimir-a-maior-altura-e-a-sua-área.c

    /*                                EXERCICIO
     ---------------------------------------------------------------------------
    */#include <stdio.h>
      int main ()
      {
       float A,B,C;
       printf("Digite o tamanho do lado A do triangulo retangulo: ");
       scanf("%f",&A);
       printf("Digite o tamanho do lado B do triangulo retangulo: ");
       scanf("%f",&B);
       printf("Digite o tamanho do lado C do triangulo retangulo: ");
       scanf("%f",&C);
       if ((A < (B+C)) & (B < (A+C)) & (C < (A+B)))
         {
    ///   if ((A==B) & (B==C))
    ///     {
          float area=(B*C)/2.0f;
          printf("\n\nO valor da area do triangulo é igual a: %f\n\n",area);
    ///     }
         }
       return 0;
      }

    C11 - gcc11.4

    • Curtir 1
  10. Boa dia!

     

    Observe a pergunta, depois, observa-se a resposta. Com essas coisas em mente,

    facilita-se a compreensão do como ir da pergunta à resposta.

     

                                                                                                                 PERGUNTA.

    O que entra [argumentos]

     

    Em 31/05/2021 às 14:36, tibia8921 disse:

    as  temperaturas máxima e minima do dia

    São composições com dois valores numéricos, digamos que teclados pelo usuário,

    sendo que, para expressar uma entrada intuitiva, escolho dois-a-dois numa linha.

     

    Atenção

    Assumo entradas ideais: não há

    nenhuma categoriade erros e falhas.

     

    Expresse-se

     

            a aocação de inteiro como dia= 0;

            a alocação de real como minima, maxima;

            a impressão: Quais foram as temperaturas do dia {dia};

            a impressão: [A Minima Maxima escalares]?

            a extração: minima, maxima;

            a impressãio: minima, maxima;

     

    Fim da expressão.

     

    C'11

    /*
                                       EXERCICIO
     -----------------------------------------------------------------------------
    */#include <stdio.h>
      int main(void)
      {
       unsigned dia= 0;
       float minima , maxima;
       printf("%s%u%c","Quais foram as temperaturas do dia ",dia,'\n');
       printf("%s","[A minima maxima escalares]? ");
       scanf("%f%f",&minima,&maxima);
    ///printf("%f%f",minima,maxima);
      }

    image.png.c632a5fda545712fd819dac967a95d27.png

     

     

     

    Veja

    https://en.cppreference.com/w/cpp/language/type float unsigned int

    https://en.cppreference.com/w/c/io/fprintf printf

    https://en.cppreference.com/w/c/io/fscanf scanf

    ...

    • Curtir 1
  11. Em 30/09/2021 às 14:35, Midori disse:

    Seria assim no caso da passagem por valor quando a função recebe apenas uma cópia do valor passado como argumento. Mas como esses dois parâmetros são ponteiros, a função vai receber o endereço das variáveis (declaradas em main) e portanto qualquer atribuição que fizer a elas dentro de calc_hexa terá efeito efetivo nelas e por isso terão seus valores alterados após a chamada da função.

    São tipos com aritmética especifica.

     

    Ponteiro é um tipo como int, só que derivado de int, não somente de int, de

    todas as primitivas e dos tipos que o programador definir e construir a partir

    do que já existe.

     

    O valor de um ponteiro precisa ser sempre, sempre um endereço, porque

    desta maneira será avaliado, senão tem algo errado.

     

    [Filosofia]
    int *p, p é uma variável 
          , sendo que 'p' pode aponta para outra
          , porque seu valor é também um endereço

     

  12. Não siga esta recomendação:

    7 horas atrás, arfneto disse:
    • Ao invés de
    	if (sexo == 'f')
            {
                if (resp == '1') femsim++;
                if (resp == '2') femnao++;
            }
            else if (sexo == 'm')
            {
                if (resp == '1') mascsim++;
                if (resp == '2') mascnao++;
            }
            else
                outros++;

     

    Prefira por exemplo

     

            if ((resp == 's') || (resp == 'S'))
            {
                if ((sexo == 'f') || (sexo == 'F'))
                    ++i, ++sim, ++fem_sim;
                else if ((sexo == 'm') || (sexo == 'M'))
                    ++i, ++sim;
            }
            else
            {
                if ((resp == 'n') || (resp == 'N'))
                {
                    if ((sexo == 'm') || (sexo == 'M'))
                        ++i, ++não, ++masc_nao;
                    else if ((sexo == 'f') || (sexo == 'F'))
                        ++i, ++não;
                }
            }

     

    Nem um e nem o outro: prefira sempre o seu, PORQUE ELE é SEU.

    Seja honesto consigo mesmo, corrija o que achar errado, somente isso.

    Em 14/06/2022 às 10:58, ningumx disse:
    if(resp == 1)
         resps++;
        else 
         if(resp == 2)
          respn++;
         else
          if(sexo == 1)
           fem++;
          else
           if(sexo == 2)
            masc++;
           else
            if(sexo == 1 && resp == 1)
             femsim++;
            else
             if(sexo == 2 && resp == 2)
              mascnao++;
          

     

    Para mim, isso foi o mais IMPORTANTE!

     

     

    • Curtir 1
  13. Porque supostamente ele é a junção de dois outros:

    Leia um número inteiro positivo, depois mostre quantos dígitos tem o número;

    Leia um número inteiro positivo, depois mostre a potência da base 2 com esse número.

     

    Junta-se os dois no liquidificador e tem-se:

    Em 18/06/2020 às 16:29, Matheus Freitas disse:

    Leia um número inteiro que representa um número binário (formado de zeros e uns). Imprima esse número convertido para base decimal.

     

    Parece fácil?

    É SÓ NÃO PENSAR D+

     

    Expressa-se

    ...  a alocação dum inteiro;

    ...  a extração de um inteiro;

    ...  a alocação doutro inteiro como decimal;

    ...  a alocação doutro inteiro como potência;

    ...  uma repetição que, se o inteiro difere de zero, faça-se,

    ...  o modulo daquele inteiro por 10 e se diferente de 0, então,

    ...  adicione potência ao valor de decimal;

    ...  eleve a potência;

    Fim da expressão.

     

    ler_um_numero_inteiro_por_binario_(1011)_e_converter_para_base_decimal.c

    /* ler um numero inteiro por binário (1011) e converter para base decimal   */
    /*=================================[ 0-0 ]==================================*
                                      EXERCICIO
    
     Leia um número inteiro que representa um número binário
     (formado de zeros e uns). Imprima esse número convertido para base decimal.
                                                                 17:34 07/05/2024
      *==========================================================================*/
     #include <stdio.h>
    
     int main (void)
     {
      printf ("%s","Entre uma configuração[ max. 10 digitos ]?>");
      int inteiro= 1111111111;
      scanf ("%10d",&inteiro);
      int decimal= 0;
      int potencia= 1;
      do
        {
         if (inteiro% 10)
            decimal+= potencia;
         potencia*= 2;
        }
      while (inteiro/= 10);
      printf ("%s%d","!>",decimal);
      putchar ('\n');
     }
    /*===========================================================================*/

    c'11 - gcc11.4

     

    😉 — Somente isso, inicialmente, fica o file.

    • Curtir 1
  14. Boa dia!

     

    Pelo que me insinua, a pergunta do enunciado era desse jeitinho, por exemplo:

    1101
    ~~~^ Isto é o valor para um inteiro, 
    ele é decimal e vale mil cento e um, 
    será escaneado e salvo numa variável 
    do seu tipo (int, long tanto faz)

     

                                                                                                              O EXERCICIO

    Convertam-se os dígitos no VALOR daquele inteiro para binário, depois...

    Mostre: 1 + 0 + 4 + 8

    Em 18/06/2020 às 16:29, Matheus Freitas disse:

    Imprima esse número convertido para base decimal.

                                                                                                    E como resposta: 13

     

    Ou seja, mil cento e um (1101) configurava|configura 13.

     

     

    *** Às vezes o enunciado parece isso, às vezes não, então…

    Quando assim, consulta-se o professor, né? 🙂 

    • Curtir 1
  15. Boa dia.

     

    Esse programa compila e faz sua programação, porém, ele não pergunta e não responde conforme enunciado:

    Em 14/07/2022 às 21:33, luizpx41 disse:

    Faça um programa que leia um número inteiro positivo N e imprima todos os números naturais de 0 até N em ordem crescente.

     

                                                                                                             Comando FOR

    iteração | repetição de comandos num bloco

     

    Como enunciado, quero escanear um número inteiro positivo N (...)

     

    Notei que sua programação quase não escaneia, e por cima disso, chama-a por

    2x, ou seja, pelo certo serão 2 valores, quando o problema é de 1 valor:

     

                                                                                               UM INTEIRO POSITIVO!

     

    Parece fácil? Veja!

    Expressa-se

     

         a alocação da variável N como inteiro;

         a extração de uma decimal;

         a alocação de um contador como número natural de valor inicialmente 0;

         a repetição que, para o contador  menor que  N, faça-se  aumentá-lo,

         e escrever o contador;

     

    Fim da expressão.

    numero_inteiro_positivo_N_e_imprima_todos_os_numeros_naturais_de_0_ate_N.c

    /* Número inteiro positivo N e imprima todos os números naturais de 0 até N */
    
    #include <stdio.h>
    #include <limits.h>
    
    int main (void)
    {
     int N= -1;
     printf("%s%u%s","Entre um número inteiro positivo [max. ",INT_MAX,"]: ");
     scanf("%d",&N);
     for (int n= 0 ; n<N ; n++)
       {
        printf("%d ",n);        
       }
     putchar ('\n');
    }

    c'11 - gcc'11.4

     

    O pai fica satisfeito 🙂 

    só confia!

  16. @arfneto

    Bom dia!

     

    Se tem uma resposta conforme o enunciado acertadamente, por favor, produza..., porém se puder. Só isso!

     

     

    São essas as minhas dúvidas:

    1. Uma fonte daquela afirmação;
    2. Um programa conforme o enunciado com mesma pergunta e resposta;
    3. E que compila.

     

    Se pode responder acertadamente com o texto do enunciado (abaixo), eu fico grato, senão pelo menos para de tentar me constranger — 😳 

     

    Foque o enunciado da pergunta, por favor.

    Em 13/06/2022 às 20:07, DanielC4 disse:

    Peça ao usuário que informe dois inteiros, sendo um valor inicial e uma razão. Preencha um vetor de 10 posições começando pelo valor inicial e incrementando-o com a razão (progressão aritmética - PA). Depois peça um número para que seja verificado se ele pertence à PA e informe o resultado na tela.

    e obrigado.

     

    • Confuso 1
  17. Boa noite!

     

    Refatorarei essa solução, é somente isso mesmo, embelezei o máximo que pude!

     

    Veja que lindinho:

    erro_em_exercicio_de_algoritmo_de_uma_entrevista.c

    /* erro em exercício de algoritmo de uma entrevista. */
    
    #include <stdio.h>
    #include <limits.h>
    
    int main ()
    {
     printf ("%s%d%s","Digite a quantidade de pessoas [max.",INT_MAX,"]: ");
     int n= -1; /* valor negativo sendo uma não quantidade */
     scanf ("%d",&n);
     if (n<=0) return 1;
     int outros= 0;
     int femnao= 0 , mascnao= 0; 
     int femsim= 0 , mascsim= 0;
     char sexo , resp;
     for (int i= 0 ; i<n ; i++)
       {
        int r= scanf (" %c %c",&sexo,&resp);
        if (r==EOF) break;
        if (sexo=='f')
          {
           if (resp=='1') femsim++;
           if (resp=='2') femnao++;
          }
        else  
        if (sexo=='m')
          {   
           if (resp=='1') mascsim++;
           if (resp=='2') mascnao++;
          }
        else
           outros++;
       }
     putchar ('\n');
     int resps= mascsim+ femsim;
     int respn= mascnao+ femnao;
     int fem  = femsim + femnao;
     int masc = mascsim+ mascnao;
     printf ("O número de pessoas que responderam sim e: %d.\n"
             "O número de pessoas que responderam não e: %d.\n"
             "A percentagem de pessoas do sexo feminino que responderam sim e: %f.\n"
             "A percentagem de pessoas do sexo masculino que responderam não e: %f.\n" ,
             resps ,
             respn ,
             (femsim*100.0)/ (fem>0?fem:1) ,
             (mascnao*100.0)/ (masc>0?masc:1));
     putchar ('\n');
    }

    c'11 - gcc'11.4

     

    Uma belezinha assim, inicialmente, já me satisfaz!

    • Curtir 1
  18.  @arfneto

    Pedi, por favor, que cite a fonte de:

    3 horas atrás, arfneto disse:

    Não funciona assim. 0xff não é um inteiro.

    Só isso: A Fonte?

     

     

    São essas as minhas dúvidas:

    1. Uma fonte daquela afirmação;
    2. Um programa conforme o enunciado com mesma pergunta e resposta;
    3. E que compila.

     

     

    Se puder responder acertadamente com o texto do enunciado, responda,

    senão tudo bem!

    Em 13/06/2022 às 20:07, DanielC4 disse:

    Peça ao usuário que informe dois inteiros, sendo um valor inicial e uma razão. Preencha um vetor de 10 posições começando pelo valor inicial e incrementando-o com a razão (progressão aritmética - PA). Depois peça um número para que seja verificado se ele pertence à PA e informe o resultado na tela."

     

     

    ***

    Desde agora, obrigado 🙂  

    Antecipadamente!

    • Amei 1
  19. @devair1010

    Boa noite!

     

    Seu programa tem duas falhas:

    #1

    ac:6:5: erro: variável não utilizada x [-Werror=unused-variable]

    c'11 - gcc'11.4

     

    #2

    Pergunta, porém, não escreva a resposta!

     

    Acho que revisei essas duas falhas acima:

    
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
     int contador    =    0;
     int i           =    0;
     char frase[100] = {""};
     puts("Digite uma frase :");    /// putzgrila
     fgets(frase , sizeof(frase) , stdin);
     frase[strlen(frase) - 1 ] = 0;
     while (frase[i] != 0 )
     {
      contador++; i++;
     }
     printf ("%s%d%c","|---> ",contador,'\n');
     putchar ('\n');
    }

    image.png.ecd9a5973671c13807610bd4c612a4ce.pngAinda há outra, ele responde (,) e (!) como letras.

  20. 1 hora atrás, arfneto disse:

    Não funciona assim. 0xff não é um inteiro

    Quem disse que não é um inteiro? Cite a fonte, por favor!

     

    @arfneto

    Boa tarde!

    Não compilou, você falhou nos especificadores de formato ou argumento.

     

    c'11 - gcc11.4

    a.c:31:28: erro: formato ‘%x espera argumento do tipo unsigned int *’, mas argumento 3 tem tipo int *’ [-Werror=format=]
       31 |     res = sscanf(valor, "%8x", (int*)&v_float);
          |                          ~~^   ~~~~~~~~~~~~~~
          |                            |   |
          |                            |   int *
          |                            unsigned int *
          |                          %8x
    a.c:36:43: erro: formato ‘%x espera argumento do tipo unsigned int *’, mas argumento 3 tem tipo int *’ [-Werror=format=]
       36 |     res                 = sscanf(ansi, "%8x", (int*)str);
          |                                         ~~^   ~~~~~~~~~
          |                                           |   |
          |                                           |   int *
          |                                           unsigned int *
          |                                         %8x

     

     

    Seu programinha, supostamente, também não responde e não pergunta conforme o enunciado: além de não compilar.

     

     

     

    Estou insatisfeito 😞 

    Em 13/06/2022 às 20:07, DanielC4 disse:

    Peça ao usuário que informe dois inteiros, sendo um valor inicial e uma razão. Preencha um vetor de 10 posições começando pelo valor inicial e incrementando-o com a razão (progressão aritmética - PA). Depois peça um número para que seja verificado se ele pertence à PA e informe o resultado na tela.

     

    • Curtir 1
  21. Em 26/05/2022 às 14:18, lxNeos disse:

    alguém sabe dizer o por que?

     

                                                                                                                ESCAPE

    Sabe, sim, é porque esse caractere está além de somente barra invertida, ele

    tem a função especial de anunciar a posição duma sequência 'escape'. Por

    exemplo, a nova linha (\n) é uma das que escapam.

     

    Aqui mais algumas:

    escape

     

    Experimente:

    Erro_ao_compilar_o_caractere_barra_invertida_no_printf.c

     

    /* Erro ao compilar o caractere \ no printf */
    #include <stdio.h>
    
    int main ()
    {
     printf ("Hello, World!\n");
     /*                    ^s. escape para quebra de linha
      */
     printf ("Hello, World!\ ");
     /*                    ^s. escape propositalmente errada
      */
    }

     

    image.png.4ff2a37783aecc3750a7cac64d607f9b.png

    c'11 - gcc'11.4

     

  22. Bom dia!

     

                                                                                                                  A Inversão

    Iteração sobre vetor

     

                         Notei que, apesar de reconhecer que essas strings são terminadas

    com null ('\0') zero, usou múltiplas notações: de vetores, ponteiro para char e/ou

    arranjo, intercambialmente. Não sei se para exemplificar que é possível, ou se é

    pura confusão. Por último, fez pouco caso dos recursos utilizáveis na função do

    exercício (pressuponho) sua 'inversao'.

     

    Testei o programa dela, e editei sua expessão.

    Veja:

     

    Com- dar-printf- em-uma-frase.c

    /* Como dar "printf" em uma frase */
    
    #include <stdio.h>
    #include <string.h>
    
    int inversao (char *s);
    
    int main (void)
    {
     char texto[100];
     printf ("Escreva uma frase [max. 99 caracteres]: ");
     scanf(" %99[^\n]",texto);
     int len= inversao (texto);
     if (len) 
       {
        printf ("%s%s%i%s",texto," => ",len," caractere");
        if (len>1) putchar ('s'); 
       }
     putchar ('\n');
    }
    int
    inversao (char *s)
    {
     if (NULL==s) return 0;
     char *s0= s;
     while (*++s)/* nul block */;
     int len= s - s0;
     while (s0<s)
       {
        char c= *--s;
        *s= *s0;
        *s0= c;
        ++s0;
       }
     return len;
    }

    c'11 - gcc'11.4

    c'17 - Pelles C'12.0

     

    Algo assim, inicialmente, já me satisfaz.

    Se o momento é dos ponteiros, então

    NÃO PENSE D+, fique com os ponteiros.

    • Curtir 1
  23. Boa noite!

    Acho que entendo você!

     

                                                                                      TABUADA DA ADIÇÃO

    c será uma soma de todos os números naturais de a sobre b até 10 tal que

    a = 0 e b = 0.

     

    soma-de-dois-numeros-em-laco-for.c

    /* Soma de Dois Números em Laço For  */
    #include <stdio.h>
    int main ()
    {
     /* A Tabuada da Adição */
     for (int a= 0 ; a<10 ; ++a)
       {
        for (int b= 0 ; b<10 ; ++b)
          {
           int c= a + b;
           printf ("%i%s%i%s%i%c",a," + ",b," = ",c,'\n');
          }
        putchar ('\n');
       } 
     putchar ('\n');
    }

    c'11 - gcc'11.4

     

     

     

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!