Como obtenho o compilador GCC para funcionar? [fechadas]

0

Então eu sou novo em programar C. Estou usando o Vim como meu editor e o GCC como meu compilador, mas não está funcionando direito. Digamos que eu esteja fazendo um programa básico para determinar se um número é ímpar ou par. Aqui está o meu código:

#include <stdio.h>

int main(int argc, char argv[])
{
    int i;

    printf("Enter a number: ");
    scanf("%d\n", &i);

    printf("%d\n", i);
    if(i % 2 == 0)
    {
        printf("Your number is even.\n");
    }
    else if(i % 2 != 0)
    {
        printf("Your number is odd.\n");
    }
    else
    {
        printf("Invalid input.\n");
    }

    getchar();

    return 0;
}

Não tenho certeza se estou programando errado ou se o GCC não é um bom compilador, ou o que for. Eu estou executando o Linux, que eu dual boot com o Windows. Agora eu pressiono CTRL - D para parar o processo, e só então ele me imprime o meu número, e diz se ele é par ou ímpar. Não é só este, muitos outros programas com formatos similares parecem fazer isso.

~ $ ./test
Enter a number: 45
45                         //I press enter, nothing happends. Ctrl-d 
Your number is even.       //ctrl-d again
~ $ 
    
por Harrison Rankin 03.11.2015 / 05:45

2 respostas

0
% bl0ck_qu0te%

O primeiro: scanf("%d\n", &i); deve ser scanf("%d", &i); .

Também outros erros:

  • O segundo argumento de main() deve ser convertido em um ponteiro para uma matriz de caracteres ou em um ponteiro para um ponteiro para um caractere: char *argv[] ou char **argv ;
  • Se i não for um número, ele ainda será convertido em um número inteiro em if(i % 2 == 0) e else if(i % 2 != 0) para que a expressão seja avaliada (na verdade, você nunca obterá a else bloquear usando esse código, como if(i % 2 == 0) ou else if(i % 2 != 0) , sendo i implicitamente convertido em um inteiro, será avaliado como verdadeiro). Faça uma leitura em this para obter informações mais adequadas maneiras de verificar se uma string é numérica.
por kos 03.11.2015 / 05:58
1

Ah, que diabos. Vou tentar responder de qualquer forma.

Resposta curta: remova \n do argumento para scanf. Quando faço isso, seu código se comporta como esperado (bem, para ser persnickety, eu também tive que alterar argv[] em *argv[] .)

Resposta mais longa: você nunca deveria usar o scanf; geralmente você fica com problemas.

Hmm ... minha resposta mais longa foi menor que a minha resposta curta. Ah bem.

    
por John Clements 03.11.2015 / 05:52