gnik Postado Setembro 12, 2011 Denunciar Share Postado Setembro 12, 2011 ola pessoal...sou novato em dev c++ e estou tendo serios problemas com uma struct....meu programa le 1 arquivo texto que contem exatamente isto...joao paulo da silva 29FIMai desenvolvi este programinha...#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> main(){ struct x {char nom[50];float n1;}; struct x alu[13]; FILE *fp; char str[2000]; int qtd=0; int i; if((fp = fopen("alunos.txt", "r")) == NULL){ printf ("O arquivo não pode ser aberto.\n"); getch(); exit(1); } if (fp){ while(strcmp(str,"FIM")) { for(i=0;i<=qtd;i++) { if(str[i] >= '0' && str[i] <= '9') { fscanf(fp,"%s",&alu[i].nom); printf("nome: %s\n",alu[i].nom); }else{ fscanf(fp,"%s",&alu[i].n1); printf("nota: %s\n",alu[i].n1); } } } } getch(); }mas da erro e fecha o programa...se alguém puder me ajudar agradeço muito...estou a 2 dias quebrando minha cabeça e não consigo...desde-já obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bruce845 Postado Outubro 6, 2011 Denunciar Share Postado Outubro 6, 2011 Amigo, o erro mais grave seu foi do seu fscanf e fprintf estar com atributo parar ler string (%s) em uma variavel float (%f).Mas há mais problemas:O seu arquivo é:joao paulo da silva 29FIMQuando o fscanf for ler a 1ª linha, ela lerá da seguinte maneira:fscanf(fp,"%s",&alu.nom);As funções de formatação scanf possuem um problema ao ler string: Se ela encontra um espaço ela termina a string.Ex.:A leitura da fscanf(fp,"%s",&alu.nom); gravaria em seu vetor de caracteres o seguinte:joaoO resto da string ela desprezaria.E outra:a repetição (for) que você fez vai até 0, ou seja, de 0 até 0...Aí iria executar apenas uma vez, inutilizando o for.Então, para te ajudar:A função para verificar se é fim de arquivo ou não é feof() (retorna 0 caso seja fim de arquivo.)Grave a nota na outra linha, assim ficará mais fácil a leitura (separar os tipos de dados).Enquanto a linha onde têm o nome do aluno você leria do arquivo com o fgets, o nome do aluno você leria com a fscanf.Não sei se essas dicas vão te ajudar, mas..Não esqueça de fechar o arquivo usando fclose()!No fopen() nos atributos, acrescente a letra "t" para certificar-se que abrirá um texto! Se deixar sem, alguns compiladores poderrão entender como arquivo binário!Bem, espero ter ajudado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
gnik
ola pessoal...
sou novato em dev c++ e estou tendo serios problemas com uma struct....
meu programa le 1 arquivo texto que contem exatamente isto...
joao paulo da silva 29
FIM
ai desenvolvi este programinha...
mas da erro e fecha o programa...
se alguém puder me ajudar agradeço muito...
estou a 2 dias quebrando minha cabeça e não consigo...
desde-já obrigado!
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.