Jump to content

Recommended Posts

Posted

Boa NOite.

Tenho aqui uma questão neste código.

Estou a tentar colocar o que o utilizador escreve num ficheiro txt o problema é que não me escreve nada.

Posso estar a fazer errado mas acho que é assim.

Desde Já Obrigado !

void jogar()
{
 FILE *fp;
 Jogador jogador;
 int contador=0;
 char nomes[100];
 fp=fopen("jogadores.txt","a");
 if(fp=NULL)
 {
	 printf("Erro ao Abrir o Ficheiro !!!! \n");
 }
 contador=jogador.no+1;
 jogador.no=contador;
 printf("Digite o seu nome \n");
 scanf("%s",jogador.nome);
 printf("Digite a sua sigla \n");
 scanf("%s",jogador.sigla);
 jogador.fichas=0;
 jogador.casa=1;
 fprintf(fp,jogador.nome);
 fclose(fp);
}

Cumprimentos João Ribeiro

Posted

Pois mas eu em outros exercícios consigo fazer com o assim com o fprintf.

E eu já tentei com esse prototipo e também não consigo.

Esta é a minha estrutura.

typedef struct _jogador {
       int no;
       char nome[100];
       char sigla[1];
       int fichas;
       int casa;
}Jogador;
Posted

se queres ignorar o que disse tudo bem ... faz lá como queres ...

afinal quem sou eu ...

se quiseres ignorar o protótipo da função força !!!! já agora ignora o resto das regras de programação e começa a gritar com o código a ver se consegues por a aplicação a correr como pretendes só com gritos !!!

já leste o protótipo, sabes (ou deverias saber) como se faz ... qual é o problema ??

fprintf(fp, "%s", jogador.nome);

não venhas dizer que já fizeste assim e não deu ... são 3 e meia da manhã mas estou bem acordado !!!

IRC : sim, é algo que ainda existe >> #p@p
Posted

Amigo primeiro sim eu li o protótipo !

Segundo se quiseres eu mostro-te o exercício para veres que como eu estava a dizer consigo fazer.

Escusas de estar mandar bocas.

Pois se vim aqui é porque precisava de ajuda.

tal como tu estás a dizer e pelo que li no protótipo.

tenho de colocar primeiro o apontador no meu caso será o fp, seguindo de %s estando eu a utilizar o char para o nome e depois vou buscar o nome há sctruct com jogador.nome.

ou seja:

 fprintf(fp,"%s",jogador.nome);
Posted

Uma ajuda:

void jogar()
{
 FILE *fp;
 Jogador jogador;
 int contador=0;
 char nomes[100];
 fp=fopen("jogadores.txt","a");
 if(fp=NULL)
 {
	 printf("Erro ao Abrir o Ficheiro !!!! \n");
 }
 contador=jogador.no+1;
 jogador.no=contador;
 printf("Digite o seu nome \n");
 scanf("%s",jogador.nome);
 printf("Digite a sua sigla \n");
 scanf("%s",jogador.sigla);
 jogador.fichas=0;
 jogador.casa=1;
 fprintf(fp,jogador.nome);
 fclose(fp);
}

Há uma coisa de errado nessa linha que o compilador, se corretamente configurado, avisa.

  • Vote 1

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Posted (edited)

A ajuda do brunoais deve ser suficiente para resolver o problema.

So quero fazer notar o (eventual) problema do

fprintf(fp, jogador.nome);

que é (alem de ma forma) se o jogador tiver um nome que contenha o caracter '%' 🙂

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Acho que já foi esclarecedor o que está neste tópico. Mas se quiseres consultar tens aqui: http://cplusplus.com/reference/clibrary/cstdio/fprintf/

Tenho aqui um exemplo de um rpograma que lê de um ficheiro e escreve num ficheiro. Dá uma vista de olhos e vê se percebes (E faz o fprintf utilizando structs):

int main(int argc, char *argv[]){
char buffer[250], *distritoNome, *concelhoNome, *freguesiaNome, *habitantesStr;
int HabitantesNum;
tabela_dispersao* tabela;
int valida = -1;
float tmp = clock();
freguesia freg;
char* nomeFicheiro = argv[1];
FILE *fp;
FILE *fo;
fp = fopen(nomeFicheiro,"r");
if(fp==NULL) {
 perror("O ficheiro não abriu.\n");
 exit(1);
}
fo = fopen("output.csv","w");
tabela = tabela_cria(10000, &hash_djb);
while(!feof(fp)){
 fgets(buffer, 1000, fp);
 distritoNome = strtok(buffer, ",\n");
 if (distritoNome == NULL) break;
 concelhoNome = strtok(NULL, ",\n");
 if (concelhoNome == NULL) break;
 freguesiaNome = strtok(NULL, ",\n");
 if (freguesiaNome == NULL) break;
 habitantesStr = strtok(NULL, ",\n");
 if (habitantesStr != NULL)
 {
  HabitantesNum = atoi(habitantesStr);
  freg.nome = freguesiaNome;
  freg.nHabitantes = HabitantesNum;
  if (tabela_adiciona(tabela, distritoNome, concelhoNome, &freg) != TABDISPERSAO_OK)break;
 }
 else
  continue;
 fprintf(fo, "%s, %s, %d\n", tabela->maiorConcelho->menorFreguesia->nome, tabela->maiorConcelho->distrito, tabela->maiorConcelho->menorFreguesia->nHabitantes);

Espero ter ajudado 🙂

Posted

Obrigado um dos erros era esse fp=NULL.

Outro que me deparei é no scanf("%s",&jogador.nome) faltava o &.

Ele não me está a levar nada para o ficheiro pq não me está a guardar nada na variável jogador.nome

Posted

Outro [erro] que me deparei é no scanf("%s",&jogador.nome) faltava o &.

Nao, nao faltava. O erro é outro.

De acordo com as definicoes postadas na primeira mensagem, o jogador.nome e do tipo char [100], o que o faz "decair" para char * quando usado no scanf, que é exactamente o que o scanf precisa. Adicionando um & fazes o valor ser do tipo char ** ...

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

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.