Jump to content

Process returned -1073741819 (0xC0000005)


Luís Paiva
Go to solution Solved by thoga31,

Recommended Posts

Luís Paiva

alguém me pode explicar o porquê deste erro? Estou a aprender a programar mas ainda sei muito pouco.

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

int main()
{
    int idade;
    printf ("Qual a tua idade: ");
    scanf ("%d, &idade");
    printf ("Tu tens %d anos de idade", idade);

    return 0;
}

 

Link to post
Share on other sites
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int idade;
    printf ("Qual a tua idade: "); -> printf("Digite a sua idade: \n");  Mete sempre \n depois do texto
    scanf ("%d, &idade");  -> scanf("%i",&idade); para numeros inteiros tens de por %i. e esta linha estava 100% errada 
    printf ("Tu tens %d anos de idade", idade); ->printf("Tem %i anos\n",idade); como em cima meti %i para chamar a variavel idade tens de por %i

    return 0;
}
Edited by pwseo
tags de código
Link to post
Share on other sites
  • Solution
thoga31
Em 26/02/2019 às 11:52, Danny disse:

printf ("Qual a tua idade: "); -> printf("Digite a sua idade: \n");  Mete sempre \n depois do texto

Não é preciso sempre um \n depois do texto: ele é usado em qualquer ponto do texto quando é preciso. Se me apetecer fazer printf("batatas \n cozidas");, nada mo impede.

Em 26/02/2019 às 11:52, Danny disse:

para numeros inteiros tens de por %i. e esta linha estava 100% errada 

O problema não era o %d, uma vez que para inteiros é indiferente o %d e o %i (sendo o %d amplamente mais usado), mas já que estamos numa de ser exaustivos, seria simpático no mínimo dizer que o que estava errado era a posição da aspa (e explicar o porquê).

Em 26/02/2019 às 11:52, Danny disse:

como em cima meti %i para chamar a variavel idade tens de por %i

Ou %d, conforme disse acima.

 

Em 26/02/2019 às 20:06, Luís Paiva disse:

Tinha uma aspa na posição errada.

Exacto. A ideia é que o scanf, tal como qualquer função na matemática, recebe uma série de argumentos por uma ordem bem determinada. Por exemplo, se tiveres a função f(x,y)=x+2y, quando fazes f(1,2), é o x que é 1 e não o y pois a ordem interessa.

No caso do scanf, o primeiro argumento é o formato esperado que o programa pretende obter do teclado: ao colocares um %d, estás a indicar que esperas um inteiro. Agora, o valor lido tem de ser guardado em algum lado, mas onde? Essa é a função do argumento seguinte: indicas, com um &, para qual variável do tipo int queres que o valor lido no teclado seja armazenado (aprenderás mais tarde o porquê do & no scanf, em princípio). Portanto, este será o aspecto geral:

scanf("%formato", &variavel);

Não sei se já aprendeste funções, mas na altura em que as aprenderes verás que o protótipo do scanf é qualquer coisa como isto:

int scanf(char const *fmt, ...);

Quando aprenderes protótipos de funções, irás entender ainda melhor esta questão dos argumentos e verás que nada te impede de ler mais que um valor no mesmo scanf. 😉

 

Cumprimentos.

Knowledge is free!

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.