Jump to content
Fórum Script Brasil
  • 0

Não imprime o novo valor da variável


ezbueno

Question

Olá!

Sou iniciante em programação e estou aprendendo a linguagem C. No código abaixo, ao passar um novo valor para a variável c, a mesma não imprime. Alguém poderia me explicar o motivo? 

 

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

int main(){
    
    
    int a = 5;
    float b = 2.5;
    char c = 'a';
    bool d = true; // true = 1, false = 0
    
    //Escrevendo na tela
    printf("\nValor de a = %d", a);
    printf("\nValor de b = %.1f", b);
    printf("\nValor de c = %c", c);
    printf("\nValor de d = %d\n", d); 
    
    printf("\n");
    
    //Lendo valor
    scanf("%d", &a);
    scanf("%f", &b);
    scanf(" %c", &c); //Quando for ler um caracter, coloca-se um espaco depois das aspas
    scanf("%d", &d);
    
    printf("\n");
    
    //Escrevendo na tela
    printf("\nValor de a = %d", a);
    printf("\nValor de b = %.1f", b);
    printf("\nValor de c = %c", c);    
    printf("\nValor de d = %d", d);    
    
    system("pause");
}

Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 1
15 horas atrás, ezbueno disse:

scanf(" %c", &c); //Quando for ler um caracter, coloca-se um espaco depois das aspas

Provavelmente é o velho problema da função scanf para ler caracteres e strings. A quebra de linha deixada na leitura de B ficar armazenada no buffer e é inserida para C. Alguns indicam colocar um espaço como você fez, para contornar esse problema, mas para mim nunca funcionou. Aconselho o uso da função fgets e pesquise na internet sobre como limpar o buffer do teclado (stdin).

Edited by Hazzu
Link to post
Share on other sites
  • 0

@ezbueno, @Hazzu Boa Tarde!

 

MEMORIA LINEAR

Tempo médio de leitura: 2 minutos


O problema não é de caractere branco na entrada da função scanf que lê 1x caractere, porém é na função scanf sim na da chamada posterior que está gravando no espaço maior que a capacidade da variável e sobrescrevendo na memória variável posterior.

 

Ordem linear de Declaração ( sobrescrevendo-se variável posterior )

Em 19/10/2019 em 01:50, ezbueno disse:

Sou iniciante em programação e estou aprendendo a linguagem C. No código abaixo, ao passar um novo valor para a variável c, a mesma não imprime. Alguém poderia me explicar o motivo? 

Exemplo

int   a = 5;    /* (4) na ordem de criação */   
float b = 2.5;  /* (3) na ordem de criação */   
char  c = 'a';  /* (2) na ordem de criação */
bool  d = true; /* (1) na ordem de criação */

As variáveis do sistema são "criadas" na ordem inversa de sua declaração; prove essa afirmação estudando seus ponteiros. No caso do exemplo a variável bool d terá o menor índice das variáveis na memória (referência), enquanto que a variável int a tem o maior índice delas.

EIxPNZSaQIDLRQkHc96oobbN7sdG3Kc9PUVIskKl

Ainda com relação as variáveis, observe que a variável bool d tem menos memória (1 byte) que uma variável int qualquer (4 bytes). E se somarmos a variável que vem depois dela (na ordem de criação: char c) ou antes dela (na ordem de declaração: char c) teremos uma equivalente variável do tipo short int (2 bytes).

Conclusão

Pois então é justamente o que acontece quando escreve-se scanf ("%d", &d); ao que sabemos de ("%d", ...) essa string de formatação lê 1x inteiro decimal do tipo int (4 bytes). Logicamente que o ponteiro da variável bool d, por conta da string "%d", é visto pela função como um ponteiro para tipo int e acaba por alcançar os bytes da variável char c que vem logo depois (na ordem de criação) zerando-a no início.

 

Obrigado

Edited by britivaldo
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148687
    • Total Posts
      644519
×
×
  • Create New...