Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com struct...


gnik

Pergunta

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...

#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!

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

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 29

FIM

Quando 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:

joao

O 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!

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...