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

Threat de duvidas - Linguagem C

Discussão em 'Programação' iniciada por AMSA, 17 de Setembro de 2007. (Respostas: 53; Visualizações: 3238)

  1. AMSA

    AMSA Power Member

    Boas pessoal.

    Fiz o seguinte programa:

    #include <stdio.h>

    int main ()
    {
    int Dias; /* Declaração de Variaveis*/
    float Anos;
    printf ("Entre com o numero de dias: "); /* Entrada de dados */

    scanf ("%d", &Dias);
    Anos = Dias/365.25;
    printf ("\n\n %d djas equivalem a %f anos. \n", Dias, Anos);
    getchar ();

    }

    O problema é q ele nao para. Isto é, apos inserir o numero de dias, a janela do DOS desaparece logo.. alguém pode dar uma dica?

    By the way eu tou a usar o Dev-C++.

    Cumps.
     
  2. AliFromCairo

    AliFromCairo Power Member

    Boas, dá uma vista e olhos aqui.
     
  3. dark_splinter

    dark_splinter Power Member

    mete um....

    system("pause");

    no fim....

    Dentro da função main ;)...
     
  4. r3pek

    r3pek Power Member

    isso é mesmo "feio" a nivel de programação.

    Usa antes um fflush(stdin) (axo que é qq coisa assim)
     
  5. Make.Love

    Make.Love Banido

    Código:
    	char opcao[1];
    	gets(opcao);
    

    coloca isto no final da tua função principal.


    já agora, escreve-se thread. :-D
    Código:
    int main ()
    {
    	int Dias; /* Declaração de Variaveis*/
    	float Anos;
    	printf ("Entre com o numero de dias: "); /* Entrada de dados */
    
    	scanf ("%d", &Dias);
    	Anos = Dias/365.25;
    	printf ("\n\n %d dias equivalem a %f anos. \n", Dias, Anos);
    	getchar ();
    [COLOR="Yellow"]	char opcao[1];
    	gets(opcao);[/COLOR]
    }
     
    Última edição: 18 de Setembro de 2007
  6. Mitch

    Mitch Banido

    Já agora, escreve-se "escreve-se" :-D
     
  7. Make.Love

    Make.Love Banido

    fogo este pessoal n deixa escapar uma! :lol:

    tens toda a razao, senao era preterio imperfeito e teria que ser lido com acentuação mais forte no "ve"! :p
     
  8. Mr_Miguel

    Mr_Miguel Power Member

    Nunca, mas nunca, mas nunca se deve usar o fflush(stdin). Tem comportamento indefinido. Tanto pode funcionar como crashar o programa.

    A opção de usar um char array seguido de um gets é mais razoável, mas também ocorrerá um erro no caso de existir mais do que um caracter no stdin (isto é, antes do '\n'), ou então não pausará se essa situação ocorrer (mais uma vez, comportamento indefinido). Basta imaginar o que acontece se introduzirmos "365aa" dias.
     
  9. Baderous

    Baderous Banido

    Coloquei as variáveis a começar por letra minúscula (não é necessário, mas é uma boa prática) e adicionei mais um getchar() no fim e já dá:

    Código:
    #include <stdio.h>
    int main ()
    {
    int dias; /* Declaração de Variaveis*/
    float anos;
    printf ("Entre com o numero de dias: "); /* Entrada de dados */
    scanf ("%d", &dias);
    anos = dias/365.25;
    printf ("\n\n %d djas equivalem a %f anos. \n", dias, anos);
    getchar();
    getchar();
    }
    
     
  10. AMSA

    AMSA Power Member

    Baderous obrigado e a todos tb.

    Vou exprimentar e dps digo-vos algo.

    Abraços
     
  11. AMSA

    AMSA Power Member

    Olá pessoal.

    Consegui meter o programa a dar :D

    Agora cá vai umas duvidaszecas:

    1 - Pq foi necessario fazer tal coisa?

    2 - Há alguma maneira de criar um executavel do programa? Será q envés de salvar como *.c salvo em *.bat?

    Outra coisa, antes de começar a programar ou tentar lol, convém primeiro dar uma vista de olhos na teoria dos algoritmos e dos fluxogramas?

    Abraços
     
  12. Aparicio

    Aparicio /dev/mod
    Staff Member

    Quando compilas o código é criado automaticamente o executável na mesma pasta do ficheiro *.c.
     
  13. AMSA

    AMSA Power Member

    AH! Nem tinha reparado lol. Obrigado!

    Estou mesmo a curtir um molhe disto! Tou mesmo ancioso para ter mais ou menos o conhecimento de toda a linguagem e para q serve as coisas para começar a fazer programas meus :D
     
  14. Make.Love

    Make.Love Banido

    Código:
    	char opcao[1];
    	gets(opcao);
    ao utilizares este pedaço de código, é criado um array, ficando á espera que seja introduzido um carácter qualquer, que por sua vez irá ser guardado na variável opção. Por isso é que fica parado até tu carregares em algo.
     
    Última edição: 19 de Setembro de 2007
  15. Baderous

    Baderous Banido

    Desnecessário e mau...
     
  16. Make.Love

    Make.Love Banido

    sem duvida que getchar(); é mais simples. Porque é que dizes que é mau?
     
  17. Baderous

    Baderous Banido

    Estás a alocar memória para um array (ainda que de pequenas dimensões)...
     
  18. s00n

    s00n Power Member

    A seguir a compilar, vais à pasta onde está o executável gerado [na mesma do *.c] e corres o executável por consola.
     
  19. AMSA

    AMSA Power Member

    Ok. Já estive a fazer isso. Ando a seguir um tutorial em português, q até agora esta razoavelmente e tb estou a ler o C for dummies que por sua vez está bastante bem explicadinho. É mesmo para quem numca ouviu ou programou nisto. lol

    Bem pessoal, mais uma duvida.

    Qual a diferença e/ou vantagem em escrever isto:

    #include <stdio.h>

    void main ()
    {

    ... etc

    e,

    #include <stdio.h>

    void main (void)
    {

    ... etc

    ?

    Outra coisa:

    float abs (float x)
    {
    if (x<0)
    return -x;
    else
    return x;
    }

    main ()
    {

    float a;
    printf ("a?");
    scanf ("%f", &a);
    printf ("O modulo é %f", abs(a));

    }

    Alguém pode-me explicar o printf ("O modulo é %f", abs(a))?

    Principalmente o q q está ali a fazer o %f?

    Cumps.
     
  20. s00n

    s00n Power Member

    É exactamente a mesma coisa. A única vantagem que eu conheço, para o segundo caso, é poderes identificar melhor que não são passados argumentos e que aquilo é uma função declarada. Mas normalmente não se escreve esse void quando não se recebem parâmetros, apenas '()'.

    Em relação ao exercício, quando usas um printf, o que está entre aspas é imprimido no standard output, o monitor. Como tal, se fizeres printf("ola\n"); ele imprime "ola" e muda de linha [caracter '\n']. No entanto como achas que imprimes o valor de uma variável?
    Se antes do printf fizeres int a = 5; e depois sim, printf("a\n"); isto imprime "a" e não o valor de 'a' criado. Para tal, indicas, dentro da área entre aspas, que vais ter uma variável de um certo tipo, usando o caracter '%' seguido do tipo da variável que queres ver imprimida: f [float], d[decimal, inteiro, double] c[caracter] s[string], e depois há outras variantes como f.2, que imprime duas casas decimais desse float que vais imprimir etc. Portanto, pegas no %f e metes dentro das aspas do printf. No entanto, falta a referência à variável que queres imprimir. Para isso, a seguir a fechar as aspas, acrescentas uma vírgula e metes o nome da variável relativa ao tipo.

    int i = 5; /* i é inteiro -> %d */
    printf("i vale %d\n", i);

    e isto imprime "i vale 5" e muda de linha.

    Agora perguntas, e como se faz se se quiser imprimir várias variáveis? Muito simples, pões os %X todos por ordem, e depois de fechar aspas, metes os nomes das respectivas variáveis aos tipos, pela mesma ordem que aparecem dentro de aspas.

    int i = 5; /* i é inteiro -> %d */
    float f = 3.2 /* f é float -> %f */
    char c = 'W' /* c é char -> %c */

    printf("i=%d\nf=%f\nc=%c\n", i, f, c); /* ou ainda... */
    printf("i=%d\n
    f=%f\n
    c=%c\n", i, f, c);

    o que imprime
    "i=5
    f=3.2
    c=W
    "

    Portanto, o printf(); recebe como argumentos uma string e/ou a lista de argumentos com os nomes respectivos às variáveis representadas pelos %X dentro do primeiro argumento string.

    Dá uma olhadela na revista PROGRAMAR, na edição nr. 7.
    http://www.revista-programar.info/front/editions
     
    Última edição: 20 de Setembro de 2007

Partilhar esta Página