1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Coisas simples que eu não sei, mas que vocês de certeza que me podem ajudar :D

Discussão em 'Programação' iniciada por FrostPt, 18 de Julho de 2012. (Respostas: 9; Visualizações: 1364)

  1. Ok, sou eu mais uma vez, com um problema aparentemente simples, mas que já está farto de aparecer como um erro e que eu não sei resolvê-lo. O que acontece é o seguinte, faço um 'if' normal e quero um 'else' logo a seguir, concluo o código e quando dou por mim tenho isto:

    erro: ‘else’ without a previous ‘if’

    Alguém me pode explicar se é necessário, qualquer coisa antes do 'if' e a mesma coisa para o 'else' ? :/

    Se calhar é mais produtivo meter o código e onde se encontra os erros, é capaz de facilitar a análise e posterior resolução. Ok, então ai vai:

    Como já deu para perceber, após a leitura do número de euros e de cêntimos é feito um conjusto de intruções que têm como objectivo:
    - Calcular quantas moedas de 2€ são necessárias, seguidamente calcula quantas de 1€ são necessárias e assim sucessivamente.

    Quanto aos erros:

    Desculpem o tamanho do post e estar a ser bastante chato, mas agradeço desde já a quem me possa ajudar ^^
     
  2. Sir_Joca

    Sir_Joca Power Member

    Tira os pontos e virgulas depois de todos os if(...), vai ver como se guardam valores em variáveis e como se mostram ao utilizador. Tens aí vários erros.
     
    Última edição: 18 de Julho de 2012
  3. Ok, já consegui meter a funcionar, tirei todos os pontos e vírgulas que tinha a seguir aos if's, segui uma sugentão de não meter chavetas se fosse só uma linha de código e estive a mudar uma pequena parte do código, depois por burrice minha n reparei que nos printf's tinha lá o 'e' comercial -.- pronto tirei isso e já está a funcionar correctamente :D
    Obrigado pela resposta ^^
     
  4. Já agora umas explicações básicas:

    ; <- Fim de instrução, logo se escreves if (condição); {coisas}, a instrução "if" termina imediatamente depois de começar, e o bloco {coisas} não tem nada a ver com o "if"

    {} <- Bloco de código, ou seja, se escreves if (condição) {coisas}, o bloco coisas é executado completo ou nada (claro que depois pode estar subdividido em outros blocos), a mesma coisa se aplica nas declarações de funções, etc etc.

    Quanto ao retirar as chavetas quando o bloco tem apenas 1 instrução, é uma questão estética (tal como meter cada instrução numa linha, indentação, etc), na minha opinião as chavetas deviam estar sempre presentes porque facilita a leitura do código:

    if (condicao) {
    coisas;
    } else {
    outras;
    coisas;
    }

    parece-me mais fácil de ler do que

    if (condicao)
    coisas;
    else {
    outras;
    coisas;
    }
     
  5. saga56

    saga56 Power Member

    Pois, também sou da opinião que as chavetas facilitam mais a leitura, e em alguns compiladores ajuda mesmo a saber onde estas fecham.

    E pronto tens já problema resolvido das ; nos lugares errados, penso que pensasses que se metia ao final de cada linha que não seja chaveta certo? ;)
     
  6. Era isso mesmo, queria agradecer ao 'cbangueses' pela explicação, ainda sou bastante inexperiente por isso até as coisas mais básicas me podem ajudar e sinceramente pensava mesmo que os pontos e vírgula se metiam sempre após cada linha.

    Só um aparte e se calhar até vou criar um post diferente, mas qual é a diferença emtre malloc's e calloc's?
     
  7. Mach4_PT

    Mach4_PT Power Member

    calloc inicializa a memória a zero (logo é mais lento)
    malloc deixa sem inicializar (logo é mais rapido)

    void *malloc(size_t size);

    The function allocates an object of size_t size (size_t = int, char, float...etc), and returns the address of the object if successful; otherwise, it returns a null pointer. The values stored in the object are indeterminate. You can safely convert the return value to an object pointer of any type whose size is not greater than size.

    void *calloc(size_t nelem, size_t size);

    The function allocates an array object containing nelem (number of elements) each of size_t size, stores zeros in all bytes of the array, and returns the address of the first element of the array if successful; otherwise, it returns a null pointer. You can safely convert the return value to an object pointer of any type whose size in bytes is not greater than size.
     
  8. Eu tenho um bocado de receio de perguntar isto, mas dêem-me um desconto

    Em termos práticos qual é a vantagem de iniciar a memória a zero?
    Quais as situações em que devo usar malloc em vez de calloc e vice-versa?
     
  9. Mach4_PT

    Mach4_PT Power Member

    Depende do teu objectivo =P
    Se vais alocar memória para depois inicializares com a tua própria informação ( o mais comum), usas o malloc.
    Se queres que ela seja inicializada a zero, usas o calloc.

    Eu pessoalmente nunca usei o calloc. Uso sempre o malloc, mesmo quando quero inicializar a zero (acabo por fazer um memset a seguir)
     
  10. metralha761

    metralha761 1st Folding then Sex

    Não é por nada, mas porque é que está atribuir o valor 0 ao cent, quanto já se sabe que é 0?

    Penso que o if (cent != 0) não faz nada e o else muito menos.
     

Partilhar esta Página