Jump to content
NASG

Problema em Vector

Recommended Posts

NASG

Bom dia,

tenho de fazer um programa com vectores, e estou a ter algo estanho, como sou iniciados nestas coisas, venho pore este meio recorrer á vossa ajuda.

Eu estou com um vector e a tentar escrever nele. O que se passa, é que quando escrevo da segunda vez no vector, ele escreve o que eu quero, mas crescenta-me duas "casas", vá se lá saber porquê.

alguem pode ajudar?

envio o que já fiz.

ainda está muito curto estou a começar.

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

int lista[20];

void menu()
{
     int op_menu,flag=0;

     printf("1-Inserir doente na fila de espera\n");
     printf("2-Retirar doente\n");
     printf("3-Retirar Prioridade ao doente\n");
     printf("4-Mostrar doentes por prioridade\n");
     printf("5-Terminar\n");
     printf("\nescolher opcao\n");
     printf("#>");
     scanf("%d",&op_menu);

   do
   {
    flag=0;
       switch(op_menu)
       {
       case 1: 
       printf("digite numero de utente a inscrever\n"); 
        
       break;
        case 2:
        printf("ola2\n");
        break;
         case 3:
         printf("ola3\n");
         break;
          case 4:
          printf("ola4\n");
          break;
           case 5:              
           break;
     
       default:
       flag=1;
       printf("opcao nao valida, Por favor insira nova opcao\n");
       printf("#>");
       scanf("%d",&op_menu);                       
       }
   }while(flag==1);
   return;
}
//Função que coloca todas as posições do vector a 0.

void limpar_vector()
{
     int i;
     for (i=0;i<20;i++)
     lista[i]=0;     
}

void inserir_utente()
{
int i,flag=0;

for(i==0;i<20;i++)
scanf("%d",&lista[i]);

  do
  {
  flag=0;
    if(lista[i]<0||lista[i]>99)
    {
    flag=1;
    printf("Valores nao permitidos\n");
    printf("digite novo numero de utente\n");
    scanf("%d",&lista[i]);
    }
  }while(flag==1);
       
}

void mostrar_lista()
{
int i;
       
       for (i==0;i<20;i++)
       printf("%d  ",lista[i]);  
}


main()
{
int i;
menu();
   
   
   inserir_utente();
   printf("LISTA DE ESPERA ACTUAL\n\n");
   mostrar_lista();
   printf("ola\n");
   
system("pause"); 

}

O meu outrput no primeiro ciclo é o seguinte. se clicar para colocar o utente =2

200000000000000000000

no 2 ciclo, coloco o utente =3

e fica algo do genero

30200000000000000000000

podem me ajudar ?

Obrigado

Share this post


Link to post
Share on other sites
NASG

o meu objectivo é gerir uma fila de espera de urgencia e as prioridades. Para isso criei um vector com 20 posições que é o numero de lugares que vou ter na fila.

na minha função main tenho as seguintes funções.

int lista[20];

Inserir utente (Onde coloco os numeros de utentes que chegam á urgencia)

void inserir_utente()

{

int i,flag=0;

for(i==0;i<20;i++)

scanf("%d",&lista);

  do

  {

  flag=0;

    if(lista<0||lista>99)

    {

    flag=1;

    printf("Valores nao permitidos\n");

    printf("digite novo numero de utente\n");

    scanf("%d",&lista);

    }

  }while(flag==1);

função que mostra que inicializa todas as posições do vector a 0 (qui tudo bem, ja vi que todas ficam a 0)

void limpar_vector()

{

    int i;

    for (i=0;i<20;i++)

    lista=0;   

}

e agora uma função que mostra os resultados que vou obtendo das inserções de utentes, e aqui existe algo que não bate certo.

void mostrar_lista()

{

int i;

     

      for (i==0;i<20;i++)

      printf("%d  ",lista); 

}

passo estas funções para a Main, e fica algo do genero

main()

{

int i;

menu();

 

 

  inserir_utente();

  printf("LISTA DE ESPERA ACTUAL\n\n");

  mostrar_lista();

 

system("pause");

}

tem um menu, mas não é importante para o caso.

Resultados do que obtenho.

quando chega um utente, atribuo-lhe o numero 2

e o meu vector

fica 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

quando chega o 2 utente, atribuo-lhe o numero 3,

e o que aparece no output é

3 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

ou seja, aparece-me mais duas casas no vector não sei como ?

o meu objectivo era que o 3 ficasse depois do 2.

podes ajudar ?

Share this post


Link to post
Share on other sites
bubulindo

Assim de repente vejo este erro que não pode estar a fazer bem:

for(i==0;i<20;i++)

é i=0 e não i==0. No for pretendes inicializar a variável e não testá-la.

Depois não compreendi o que pretendes com a função inserir utente e aquele ciclo for com os scanf's sem um feedback para o utilizador, e o while com uma flag podia ser alterado para algo melhor.

Como testas o programa?


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
NASG

é isso mesmo ultrapassei o problema que estava  a ter, relamente tens razão, é uma distração que me custou imenso tempo.

Eu estou a trabalhar com DEVC++, por isso compilo  e vejo logo o que estou a ter.

Muito obrigado pela tua ajuda.

na função inserir_utente, é suposto ser um ciclo para que o user vá inserindo os utentes na lista de espera. Essa parte da flag não está a funcionar, tenho ainda muitas dificuldades nisto, e é por isso que estou a tentar e a pedir ajuda.

Obrigado

Share this post


Link to post
Share on other sites
bubulindo

    while(lista<0||lista>99)
    {
    printf("Valores nao permitidos\n");
    printf("digite novo numero de utente\n");
    scanf("%d",&lista);
    }

Algo assim não funcionaria?

E, para complicar um pouco, que acontece se o utilizador colocar mais de 20 doentes no vector? Não devias testar se o vector já está cheio? Isto dos buffers é uma complicação... ;)


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
NASG

Ola amigo, estive a tentar como disseste, e não dá, apenas dá colocando lista, não sei se te esqueceste do I, ou se era mesmo assim que me estavas a dizer.

Obrigado pela vossa ajuda, já tenho avanaçado mais um pouco, isto de começar é um pouco complicado, mas estou a gostar de programar.

Obrigado a todos.

Share this post


Link to post
Share on other sites
NASG

estou a tentar limpar um vector.

int num_utente[19],pri_utente[19];

void mostrar_lista();

void limpar_vector()
{
     int i;
     for (i=0;i<19;i++)
     {
     num_utente[i]=0; 
     pri_utente[i]=0;
     
     }  
     
    printf("%d", num_utente);
    printf("%d",pri_utente);
    return;
}

Share this post


Link to post
Share on other sites
Baderous

Esses printfs não vão funcionar direito. Para mostrar os valores dos arrays, tens de os percorrer e mostrar os seus valores um a um.

Share this post


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.