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

Como retirar uma string de uma estrutura?

Discussão em 'Programação' iniciada por ZeCoxao, 27 de Maio de 2009. (Respostas: 7; Visualizações: 1037)

  1. ZeCoxao

    ZeCoxao Power Member

    Já tentei de tudo, gets, fscanf("%s"), acho que não há maneira de sacar a string da estrutura.
    A estrutura está definida globalmente, ou seja fora da main e das funções.
    Help please.
    E é em C++.
     
  2. Tomb4000

    Tomb4000 Power Member

    e dizes tu que strcpy() não dá?
     
  3. ZeCoxao

    ZeCoxao Power Member

    hummm, isso copia a string, mas isso elimina o propósito da estrutura.
    Vou ver.
     
  4. Tomb4000

    Tomb4000 Power Member

    Pensei que o teu problema era copiar :P
     
  5. jpsfs

    jpsfs Power Member

    Boas!
    Nao percebi o que querias dizer com estrutura (Struct?).
    Portanto, partindo do principio que essa string é um campo da estrutura, depois de acederes podes usar o substr( ).

    Fiquei na dúvida quando dizes que não tens interesse em copiar a string, mas entao queres aceder mm à string? (nome_da_estrutura.nomedocampo()?)

    Cumpz jpsfs
     
  6. ZeCoxao

    ZeCoxao Power Member

    até agora és o que chegou mais perto.
    eis o meu código:

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct UTILIZADOR
    {
            char playername[25];
            int score;
    }UTILIZADOR;
            
    typedef struct QUESTIONARIO
    {
         char pergunta [100];
         char respostaA [25];
         char respostaB [25];
         char respostaC [25];
         char respostaD [25];
         int numero;
         char respostacerta;
    }QUESTIONARIO;
    
    void jogador(char nome [25] )
    {
         printf("Bem vindo user\n");
         FILE *fp;
         fp=fopen("perguntas.txt","r");
         int pontuacao;
         printf("Aqui vao as perguntas:\n");
    
    }
    void adicionar()
    {
         FILE *fp;
         fp=fopen("perguntas.txt","a");
         if (fp==NULL)
         {
            printf("Erro ao abrir perguntas");
         }
    printf("\nInsira a pergunta se faz favor");
    fflush(stdin);
    gets(QUESTIONARIO.pergunta);
    printf("\nQuais as respostas?");
    gets(QUESTIONARIO.respostaA);
    gets(QUESTIONARIO.respostaB);
    gets(QUESTIONARIO.respostaC);
    gets(QUESTIONARIO.respostaD);
    printf("\nQual a resposta certa?");
    scanf("%c",&QUESTIONARIO.respostacerta);
    fprintf(fp,"%i%s%s%s%s%s\n",QUESTIONARIO.numero,QUESTIONARIO.pergunta,QUESTIONARIO.respostaA,QUESTIONARIO.respostaB,QUESTIONARIO.respostaC,QUESTIONARIO.respostaD,QUESTIONARIO.respostacerta);
    fclose(fp);
    }
    
    void admin()
    {
         int op;
         printf("\nBem vindo admin");
         printf("\nQuais sao as suas opcoes?\n1-Introduzir pergunta\n2-Alterar pergunta\n3-Eliminar pergunta");
         scanf("%i",&op);
         switch(op)
         {
                   case 1 : adicionar();
                   //case 2 : alterar();
                   //case 3 : remover();
         }
    
    }
    
    void login()
    {
          printf("Login a efectuar.Se for user ,directamente para as perguntas, se for admin, opcoes de perguntas\n");
          int d=0;
          char passw[25];
          char aux[25];
          char aux2[25];
          char nome[25];
          char ch[20];
          char ch1[20];
          int i,j,a=0,b=0,c=0;
          FILE *fp;
          fp =fopen ("Buzz.txt","r");
             if (fp == NULL){
                           printf ("Erro ao abrir ficheiro do jogo.");
                           }
             printf("Introduza o nome: ");
             gets(nome);
             printf("\nPassword: ");
             gets(passw);
             while( fgets(ch,200,fp) != NULL)
             {
                    for(i=1;i<strlen(ch)-1;i++)
                    {
                           if(ch[i]!='/')
                           {
                                         if(b==0)
                                         {
                                                 aux[a]=ch[i];
                                                 a++;
                                         }
                           }
                           else
                           {
                               b=1;
    
                           }
                           if ((b==1)&&(d==1))
                           {
                                    aux2[c]=ch[i];
                                    c++;
                           }
                           if(b==1)
                           {
                                   d=1;
                           }
                    }
    
                    b=0;
                     aux[a]='\0';
                     aux2[c]='\0';
                    if(strcmp(aux,nome)==0&&strcmp(aux2,passw)==0)
                    {
    
                                                           if(ch[0]=='*')
                                                           {
                                                                         printf("\tLogin efectuado\n");
                                                                         admin();
                                                           }
                                                           else if(ch[0]=='+')
                                                           {
                                                                 printf("\tLogin efectuado\n");
                                                                 jogador(nome);
                                                           }
                    }
             d=0;
             c=0;
             a=0;
                 }
    
          fclose(fp);
          system("PAUSE");
    }
    
    main()
    {
          login();
          return 0;
    }
    
    O erro que me dá é "syntax error before QUESTIONARIO"
    Alguém??
     
    Última edição pelo moderador: 27 de Maio de 2009
  7. tu onde tens gets(QUESTIONARIO.respostaA); n podes fazer isso assim.
    1º tens de defenir a variaver global tu so defeniste a estrutura não defeniste nenhuma varialvel desse tipo
    EXEMPLO:

    Código:
    typedef struct UTILIZADOR
    {
            char playername[25];
            int score;
    }UTILIZADOR;
            
    typedef struct QUESTIONARIO
    {
         char pergunta [100];
         char respostaA [25];
         char respostaB [25];
         char respostaC [25];
         char respostaD [25];
         int numero;
         char respostacerta;
    }QUESTIONARIO;
    
    QUESTIONARIO quest;
    UTILIZADOR util;
    
    e agora sim utilizas da seguinte maneira por exemplo:
    gets(quest.respostaA);
    gets(quest.respostaB);

    etc etc etc
     
    Última edição pelo moderador: 27 de Maio de 2009
  8. ZeCoxao

    ZeCoxao Power Member

    ahh eu sabia...
    disseram-me que não era assim, mas era!!!
    Obrigado pah.
     

Partilhar esta Página