Ir para o conteúdo
Innight

Apagar Strings

Mensagens Recomendadas

Innight    0
Innight

Boas.Gostava de saber como eu apago uma string desta estrutura:

typedef struct tagCursoFile
{
  char nome[MAX_STR+1]; 
  char descricao[MAX_STR+1];
  unsigned ciclo;
  int preenchido;
}Fcurso;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Innight    0
Innight

ok eu tenho aquela estrutura e tenho esta funcao.

Eu quero apagar o curso que o utilizador escolher dentro do vector.Por exemplo escolho o nome XPTO ele ja a fazer a procura e quero que ele apague esse do vector. 

void EliminarCursos()
            {
             int i,opc;
              char nome[MAX_STR];
            
              printf("Introduza o nome que procura");
              scanf("%s",&nome);
              for (i=0; i<MAX_CURSOS; i++) 
             {
             if (strcmp(nome,Cursos[i].nome)==0)       
             {
             //linhas apagar
             }
            }
       
          }

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
n3lThon    1
n3lThon

Não existe nada para apagar, tens de ser tu a colocar lá qualquer coisa e que depois entendas como vazio. Não dá para retirar uma posição no vector.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Innight    0
Innight

Tive a pesquisar no google verifiquei que se podia fazer isto Cursos[ i ] = '\0'; mas da erro a mim depois veriquei tambem Cursos[ i ] = " ";

O unico que ainda funciona é este Cursos[ i ] =Cursos[i+5];

Mas o grande problema deste é se no Cursos[5] se existe outro curso vai copiar:S

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

Se bem entendi, Cursos é um vector daquelas estruturas, nesse caso devias fazer

if(strcmp(nome,Cursos[i].nome)==0) 

(usa as tags code para que apareça tudo)

Depois deves querer remover a estrutura. A questão é, quando queremos ter uma lista dinâmica, geralmente usamos listas ligadas que permitem inserção e remoção de elementos muito facilmente. Num array "apagar" a estrutura corresponde a mover todas as estruturas que estão nas posições seguintes para trás, algo do estilo:

if(strcmp(nome,Cursos[i].nome)==0) {
   MAX_CURSOS--;
   for(j=i; j<MAX_CURSOS; j++)
     Cursos[j]=Cursos[j+1];
}

Claro que estou a assumir que MAX_CURSOS apesar de estar em maiúsculas não é uma constante.

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

Eu percebi que era. A questão é, se tens um vector, não precisas de uma constante para saber o tamanho máximo, precisas é de uma variável que te diga quantos cursos estão guardados no vector, isto porque como já mostraste vais precisar de os adicionar e remover, ou seja, o seu número não se vai manter constante.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Innight    0
Innight

exacto o pior é que o preenchido da estrutura nao funciona.por exemplo eu crio assim:

void CriaCursos()//Funcao para criar cursos
     {
     int i;
         for (i=0; i<MAX_CURSOS; i++) {
          if (Cursos[i].preenchido == 0) {    
            leString(Cursos[i].nome, "Nome do Curso: ", MAX_STR+1); 
            leString(Cursos[i].descricao, "Descricao do Curso: ", MAX_STR+1);
            Cursos[i].ciclo = leUnsigned("Ciclo do Curso: ");
            printf("--- Curso criado com sucesso ---\n");
            system("PAUSE");
            system("CLS");
            Cursos[i].preenchido++;
            break;
                 }
                  }
     
      if (i==MAX_CURSOS) 
          printf("Excedeu o tamanho do vector\n");
          }

Mas o meu preenchido nao passa de 1,embora possa ter 3 cursos inseridos:S. Eu tambem só o tenho declarado na estretura em mais lado nenhum. Por exemplo no eliminar deve ser o preenchido-- em vez de MAX_CURSOS certo?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade