Ir ao conteúdo

Posts recomendados

Postado

Caros, 

 

Criei o seguinte código bem simples:

 

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

 

int main(){
int a, b, c

    printf("Vamos Realizar um calculo\n");

    printf("Digite o primeiro valor: ");
    scanf ("%d",&a);


    printf("Digite o segundo numero: ");
    scanf("%d", &b);

    c = a + b;
    printf("O resultado e: %d", c);

    return 0;
}

 

Mas quando executo, em log e others aparece a mensagem seguinte:

 

error: expected initializer before "printf"

error: 'c' was not declared in this scope

 

Não consegui identificar o erro.

 

Alguém saberia a solução?

 

  • Amei 1
Postado

@DCInfo    é como o @Lucca Rodrigues   disse mesmo , pois ali na mensagem que o compilador mostrou , está escrito que existe um erro antes do printf , e o erro é que ficou faltando o finalizador de linhas , que é o ponto e vírgula  ., que precisa estar lá depois da variável  c .

#include <stdio.h>
#include <stdlib.h> 
int main(){
    int a, b, c ;
    printf("Vamos Realizar um calculo\n"); 
    printf("Digite o primeiro valor: ");
    scanf ("%d",&a); 

    printf("Digite o segundo numero: ");
    scanf("%d", &b); 
    c = a + b;
    printf("O resultado e: %d", c); 
    return 0;
} 

 

  • Curtir 1
Postado
1 hora atrás, devair1010 disse:

e o erro é que ficou faltando o finalizador de linhas

 

';' não é um finalizador de linhas. Isso seria o '\n' mesmo. 

 

É perfeitamente legal escrever

 

	int   a

        ,

                                       b,


                c

;

por exemplo. E também é perfeitamente legal escrever

    int i; int j; int k;        
Citação

';' finaliza um comando e não uma linha.

 

Ligeiramente off-topic

 

Não é boa ideia declarar mais de uma variável por linha, por várias razões. Isso está em vários guias de recomendação, em várias empresas e mesmo no C++ Core Guidelines.

 

E sempre inicialize suas variáveis.

 

Se usasse uma por linha provavelmente não teria esquecido do ; por exemplo ;) porque as 3 declarações seriam iguais:

	int a = 0;
	int b = 0;
	int c = 0;

 

 

  • Curtir 1
Postado

O ponto e virgula, pontuador que define o fim para uma declaração.


; é a finalizadora que marca o fim e o começo de outra expressão em C não importando a endentação. Já a Python é superior, entre outras coisa, em termos de semântica porque acontece digamos a união entre semântica e endentação o que é bem util. 

 

Obviamente que no pré-processamento a endentação tem 0 importância em C; que quando coerentemente usada com consistência produz um código vistoso e não mais, importante mesmo é o respeito com relação a pontuação da linguagem que em Python quase não existe, pois inteligentemente se utiliza da endentação.

 

 

Comentários ...

Em 14/07/2020 às 13:01, devair1010 disse:

e o erro é que ficou faltando o finalizador de linhas

Sim; Ponto virgula finaliza a linha e como digo: seguimento composto ou lista de declaração e expressão.

 

Em 13/07/2020 às 22:45, DCInfo disse:

Mas quando executo, em log e others aparece a mensagem seguinte:

 

error: expected initializer before "printf"

error: 'c' was not declared in this scope

Eu entendo a mensagem, mas não entendo o o porquê de ser assim.

 

  • Curtir 2
Postado
1 hora atrás, Mauro Britivaldo disse:

Eu entendo a mensagem, mas não entendo o o porquê de ser assim

    int a, b, c
    printf("Vamos Realizar um calculo\n");

O compilador consegue avaliar que 'a' e 'b' são int, porque as vírgulas separam as declarações.


Mas para 'c' não dá pra ter certeza e fica indefinido. Mas ao encontrar o printf() entenda que printf() é uma função e retorna o número de bytes enviados para a saída.


Assim o compilador imagina 

   int a, b, c = printf("Vamos Realizar um calculo\n");

Como o mais provável, e assim explica o 
 

Citação

error: expected initializer before "printf"

 

porque faltou o '='. E como 'c' não foi declarado, ao final do escopo ele vai claro se queixar da referência a 'c' 
 

Citação

error: 'c' was not declared in this scope


por causa dessa linha

  c = a + b;

 

 

adicionado 2 minutos depois
2 horas atrás, Mauro Britivaldo disse:

; é a finalizadora que marca o fim e o começo de outra expressão em C

 

Apenas o fim.
 

image.png.f60b2d314fa4f26ec14b646cc085604b.png

 

No C Standard ISO/IEC 9899

Postado
5 horas atrás, arfneto disse:

Mas para 'c' não dá pra ter certeza e fica indefinido. Mas ao encontrar o printf() entenda que printf() é uma função e retorna o número de bytes enviados para a saída

 

 

O código foi testado, não há supressa. Mesmo assim obrigrado! 

Postado
7 horas atrás, Mauro Britivaldo disse:

O código foi testado, não há supressa

você aparentemente não entendeu.

 

Eu te expliquei o porque da mensagem de erro, porque você disse que não tinha entendido...

 

15 horas atrás, Mauro Britivaldo disse:

Eu entendo a mensagem, mas não entendo o o porquê de ser assim

 

E o que estava indefinido era o erro e a variável c. Pela falta do terminador o compilador esperava algo como eu expliquei

 

13 horas atrás, arfneto disse:

int a, b, c = printf("Vamos Realizar um calculo\n");

 

E por isso c ficou indefinido e gerou a mensagem ao final do scope

 

Postado
Em 16/07/2020 às 11:30, arfneto disse:

Eu te expliquei o porque da mensagem de erro, porque você disse que não tinha entendido...

 

Obrigado!

 

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!