kaaps Posted May 27, 2012 at 01:54 AM Report #458310 Posted May 27, 2012 at 01:54 AM 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
HappyHippyHippo Posted May 27, 2012 at 02:00 AM Report #458311 Posted May 27, 2012 at 02:00 AM o protótipo da função fprintf não está correcto : http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html exemplo: FILE * fd; char * string = "TEXTO"; printf(fd, "%s", string); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
kaaps Posted May 27, 2012 at 02:08 AM Author Report #458313 Posted May 27, 2012 at 02:08 AM 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;
HappyHippyHippo Posted May 27, 2012 at 02:27 AM Report #458314 Posted May 27, 2012 at 02:27 AM 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 Portugol Plus
kaaps Posted May 27, 2012 at 02:50 AM Author Report #458317 Posted May 27, 2012 at 02:50 AM 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);
brunoais Posted May 27, 2012 at 08:39 AM Report #458323 Posted May 27, 2012 at 08:39 AM 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. 1 Report "[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%.
pmg Posted May 27, 2012 at 08:53 AM Report #458325 Posted May 27, 2012 at 08:53 AM (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 May 27, 2012 at 08:54 AM 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!
Happening Posted May 27, 2012 at 10:48 AM Report #458336 Posted May 27, 2012 at 10:48 AM 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 🙂
kaaps Posted May 27, 2012 at 12:58 PM Author Report #458354 Posted May 27, 2012 at 12:58 PM 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
pmg Posted May 27, 2012 at 01:07 PM Report #458358 Posted May 27, 2012 at 01:07 PM 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!
kaaps Posted May 27, 2012 at 01:16 PM Author Report #458361 Posted May 27, 2012 at 01:16 PM Ok estive a ler sobre isso agora e já percebi. Muito Obrigado (:
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now