Como retirar uma string de uma estrutura?

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++.
 
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
 
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:
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:
Back
Topo