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

Dúvida em C.

Discussão em 'Programação' iniciada por d4nd, 19 de Janeiro de 2013. (Respostas: 19; Visualizações: 1239)

  1. d4nd

    d4nd Power Member

    Boas.

    Há alguma maneira de uma função retomar 2 valores?


    Cumps.
     
  2. Ace-_Ventura

    Ace-_Ventura Power Member

    Não. O que podes fazer é retornar 1 estrutura, um array, ou enviar apontadores para dentro da função
     
  3. d4nd

    d4nd Power Member

    Obrigado : )
     
  4. d4nd

    d4nd Power Member

    Boas.
    Estou agora a fazer um programa em C que pede numeros ao ultilizador e no final mostra o maior, menor etc.
    Para parar introdução de numeros deve-se pressionar 0 e o programa acaba e irá calcular o maior e menor e mostrar ao ultilizador.

    O problema é que conta o 0 como numero, logo o menor é sempre 0, o que queria era que não contasse o 0 (que é para terminar a introdução) como numero.
     
  5. dagas46

    dagas46 Power Member

    Assumindo que estás a colocar os valores recebidos num array tens duas opções de resolver o problema:

    1 - Só colocas o valor no array depois de verificares que não é 0.

    2 - Crias uma varíavel, i, que é incrementada sempre que inseres um número no array. Quando inserires o 0, calculas o menor entre a posição 0 do array e a posição i-1.
     
  6. manelis

    manelis Power Member

    Dá se passares um endereço como argumento, mas não sei até que ponto isso é complicar, depende do que andares a fazer.
     
  7. mauro1855

    mauro1855 I'm cool cuz I Fold

    Han? Acho que a solução passa por isto:

    algo tipo

    Código:
    int i, valor;
    int array[NUM_VALORES];
    
    for(valor=1, i=0; valor!=0 && i<NUM_VALORES; i++){
       scanf("%d", &valor);
       if(valor!=0)
           array[i]=valor;
    }
    
    
    NUM_VALORES seria um limite que impoens ao array.

    Cumps
     
  8. manelis

    manelis Power Member

    Se tu chamares uma função com um endereço tipo:

    funcao(&a);

    E depois lá dentro alterares o a, é como se retornasses um segundo argumento.
     
  9. jcmsalves

    jcmsalves Power Member

    true.

    passas como argumento algo para ser escrito dentro da função e para além disso retornas algo

    se bem que para o que ele quer não será o mais simples ou até indicado

    é melhor usar um array de números como foi já explicado
     
  10. d4nd

    d4nd Power Member

    Ora boas de novo.

    Alguem me sabe dizer o porque de a função sair() não está a repetir o programa quando o utilizador mete 2?


    Se o utilizador por 2 o programa sai a mesma.
     
  11. d4nd

    d4nd Power Member

    Precisava mesmo de ajuda para este problema visto que já me estou a baralhar todo, porque antes isso resultado mas agora foi testar e não resulta.
     
  12. Noeljunior

    Noeljunior I fold therefore I AM

    Não faço ideia porque é que isso não está a repetir o programa. Cheira-me que o problema está fora dessa função, digo eu.

    Só queria dizer para não fazeres isto: main(); -> principal(); -> sair(); -> principal(); -> sair(); -> principal(); -> sair(); ...
     
  13. d4nd

    d4nd Power Member

    Isso funcionava até eu introduzir um vetor no programa, depois deixou de dar.
    Agora para recomeçar o programa tenho de chamar o main coisa que não queria.
     
  14. _K_

    _K_ Power Member

    Tens isso tudo no mesmo ficheiro certo? Cola aí com as tags certas pf.
     
  15. d4nd

    d4nd Power Member

    O void principal está assim:



    Foi quando introduzi o vetor que a função sair deixou de funcionar.
     
    Última edição: 28 de Janeiro de 2013
  16. Death_Knight

    Death_Knight Power Member

    Isso não estará a dar erro de compilação e não estarás a correr a "last stable version"? Porque acho muito estranho esse vector s, se quiseres um vector dinâmico tens que alocar a memória e não podes usar a variável declarada na linha anterior (poderias eventualmente ter um s caso i fosse uma variável global assim como o mauro1855) a não ser que tenha havido alguma "actualização á linguagem que eu não conheça.
     
  17. d4nd

    d4nd Power Member

    O programa compila e corre tudo bem, as maravilhas.

    Fui agora testar no C++ builder, e da erro no vetor.

    Cada vez percebo menos do que se passa.
     
    Última edição: 28 de Janeiro de 2013
  18. Noeljunior

    Noeljunior I fold therefore I AM

    Isso erro de compilação em C não me parece ter. Declarar um array assim
    Código:
     int s[i]; 
    é válido. Um problema que pode surgir é o
    Código:
    int i;
    não estar a ser inicializado. Não sei que compilador está a ser usado mas não é suposto ele inicializar a variável. O que é comum acontecer é o SO inicializar isso por ele se tiver espaço assim a zeros. Mas, mais uma vez, não é uma coisa previsivel por isso é bom ter algum cuidado para isso. Normalmente a solução é definir um tamanho máximo do array ou, como já dito, alocação dinâmica.

    Não consegui perceber exactamente como fazes os calculos que queres porque código desse não identado custa a ler (usa [.code]código[./code] sem o . da proxima vês), mas é importante guardar a lista dos números introduzidos? Se sim, para quê?
     
    Última edição: 31 de Janeiro de 2013
  19. d4nd

    d4nd Power Member

    Sim o importante é guardar a lista para depois os mostrar de novo.

    O compilador é o DevC++ a versão se não me engano é a ultima.
    Fiz agora outro programa da mesma forma, declarei o vetor v e int i e deu na perfeição.
     
  20. Noeljunior

    Noeljunior I fold therefore I AM


    Declarar o vector v e int i, como dizes, não faz sentido nenhum. Quanto muito ao contrário que é certamente o que estás a fazer.

    Mas o que eu estava a falar não era sobre a declaração mas sim a inicialização. Fazendo como fazes, qual o tamanho que esperas que o array tenha? Isto é mais uma situação que os que sabem avisam e o pessoal, porque funciona, ignoram. É o tipo de erro que tu podes testar 1001 vezes e funcionar e no dia da defesa deixar de funcionar. O valor de i depois da declaração não é previsivel.

    Já agora, segundo me lembro o DevC++ é um IDE e o compilador que usa é o GCC.

    E outra coisa: qual é o erro que estás a ter?
     

Partilhar esta Página