1
resposta

Correção

Favor corrigir! Funcionou da meira que elaborei porém, algum ponto que poderia ser melhorado?

#include <stdio.h>
#include <stdlib.h>


struct registro{
char nome [20];
char telefone [10];

};

struct registro r;

int main (){

printf("Digite o nome:\n");
scanf ( " %s",  &(r.nome));

printf("Digite o telefone:\n");
scanf (" %s", &(r.telefone) );

printf("O nome digitado foi %s e telefone foi %s \n", &(r.nome), &(r.telefone) );

}
1 resposta

Olá Giliandro.

Está tudo correto sim.

A unica alteração que eu faria seria no printf, porque por mais que funcione, Eu acredito que fica mais claro quando você coloca a própria variável (r.nome), invés do endereço &(r.nome).

Antes:

printf("O nome digitado foi %s e telefone foi %s \n", &(r.nome), &(r.telefone) );

Depois:

printf("O nome digitado foi %s e telefone foi %s \n",  r.nome, r.telefone) );

Mas que fique claro que da maneira que está, já está correto. Como podemos ver na documentação na parte de ... (additional arguments),que diz que quando colocarmos %s, é aceito como parâmetro o endereço de memoria.

Mas se tivermos usando int por exemplo teríamos 'problemas' .

#include <stdio.h>
#include <stdlib.h>


struct registro{
    char* nome [20];
    char* telefone [10];
    int numero;
};

struct registro r;

int main (){

    printf("Digite o nome:\n");
    scanf ( " %s",  &(r.nome));

    printf("Digite o telefone:\n");
    scanf (" %s", &(r.telefone) );

    printf("Digite um numero:\n");
    scanf (" %d", &(r.numero) );


    printf("O nome digitado foi %s e telefone foi %s e o numero foi %d \n", &(r.nome), &(r.telefone), &(r.numero));

}

Inclui uma terceira variável que vai receber um inteiro.

igornascimentoflipe@penguin:~/Documents/fórum alura/topico-Correcao-108887$ gcc main.c -o exec 
igornascimentoflipe@penguin:~/Documents/fórum alura/topico-Correcao-108887$ ./exec 
Digite o nome:
igor
Digite o telefone:
49300724
Digite um numero:
25
O nome digitado foi igor e telefone foi 49300724 e o numero foi -2060648112 
igornascimentoflipe@penguin:~/Documents/fórum alura/topico-Correcao-108887$ 

Veja que usando &(r.numero) o que foi impresso foi o endereço de memoria, e não o numero. Isso aconteceu porque o %s e o %d esperam coisas diferentes.

Apenas o %s aceita ponteiros como parâmetro e funciona 'corretamente', já o %d quer receber a variável.

    printf("O nome digitado foi %s e telefone foi %s e o numero foi %d \n", &(r.nome), &(r.telefone), r.numero);

Retirando o & corrigimos o resultado.

igornascimentoflipe@penguin:~/Documents/fórum alura/topico-Correcao-108887$ gcc main.c -o exec 
igornascimentoflipe@penguin:~/Documents/fórum alura/topico-Correcao-108887$ ./exec 
Digite o nome:
Igor
Digite o telefone:
49300724
Digite um numero:
25
O nome digitado foi Igor e telefone foi 49300724 e o numero foi 25 
igornascimentoflipe@penguin:~/Documents/fórum alura/topico-Correcao-108887$ 

Espero ter te ajudado, qualquer duvida não hesite em perguntar.

Bons Estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software