• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

suzy

ficheiro e array

13 mensagens neste tópico

;) malta

tenho o seguinte ficheiro de texto.

Algoritmos e Programação

200

12345 3 12.6

33333 5 16.2

32139 12 7.2

11111 11 11.1

12345 0 19.2

(…)

Bases de Dados I

138

11311 4 3.4

12321 1 12.4

13333 4 7.7

11221 12 15.5

31144 1 15.8

(…)

Electrónica

80

12333 3 6.8

12222 2 12.7

11123 3 11.4

11122 12 9.8

12311 1 15.5

(…)

A informação deve ser armazenada num array de estruturas onde se possa guardar o nome da

disciplina e a média calculada

como faço isto??

passa este ficheirode texto para um ficheiro binario??? e depois ai calculo?

obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá suzy!

Convinha especificares melhor qual é o teu problema e o que são os dados que nos apresentas!

Eu suponho que os numeros de cinco digitos sejam os numeros de aluno... e os seguintes na  mesma linha as clasificações de cada teste...

Enfim, quer seja assim quer não o que deves fazer é criar uma extrutura do tipo "disciplina" que terá um vector de extruturas do tipo "aluno" e por ai fora...

Enfim, acho que a resposta mais directa á tua pergunta è: Sim tens de ser tu a programar tudo... Não recorras a nenhum ficheiro binário!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ficheiro binário? Para quê?

Usas um while cuja condição é testar se o resultado da chamada a um scanf para ler o nome de cada disciplina é 1, e enquanto assim for, lês o número de registos da mesma. Depois usas outro while, ainda dentro do anterior, para ler o número de linhas que leste anteriormente, usando outro scnanf para cada linha.

A função scanf retorna um inteiro que indica o número de campos que foi possível ler. Daí servir para testar se conseguiu ler o nome da disciplina.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:) de dark consegui fazer este problema , e realmente deu.

mas existe um pequeno senao, que é no nome das disciplinas.

se for algoritmos e programacao, se fizer:

while(fscanf(fp,"%s",str)==1)

so me vai aparecer a string programacao.

poderia colocar a funcao fscanf ==3, mas existem outras disciplinas no ficheiro que apenas tem uma palavra, como faço para ultrapassar isto?

obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para leres strings com espaços, podes usar

fscanf(fp, "%[^\n]", str);

O que isto faz é ler um conjunto de caracteres quaisquer até encontrar um '\n' para a string str. O '\n' do fim da linha mantém-se no buffer de entrada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pcaldeira, não conheço essa sintaxe. Podes indicar-me documentação onde esteja descrita?

O que conheço é o seguinte

fscanf(fp,"%s\n",str)

que vai ler toda a linha até ao '\n', ignorando-o.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais info na man page do scanf:

[      Matches a nonempty sequence of characters from the specified set

              of  accepted  characters;  the next pointer must be a pointer to

              char, and there must be enough room for all  the  characters  in

              the  string,  plus  a  terminating null byte.  The usual skip of

              leading white space is suppressed.  The string is to be made  up

              of  characters  in  (or  not  in)  a  particular set; the set is

              defined by the characters between the open bracket  [  character

              and a close bracket ] character.  The set excludes those charac‐

              ters if the first character after the open bracket is a  circum‐

              flex  (^).  To  include a close bracket in the set, make it the

              first character after the open bracket or  the  circumflex;  any

              other position will end the set.  The hyphen character - is also

              special; when placed between two other characters, it  adds  all

              intervening characters to the set.  To include a hyphen, make it

              the  last  character  before  the  final  close  bracket.    For

              instance,  [^]0-9-]  means  the  set  "everything  except  close

              bracket, zero through nine, and hyphen".  The string  ends  with

              the appearance of a character not in the (or, with a circumflex,

              in) set or when the field width runs out.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pcaldeira, não conheço essa sintaxe. Podes indicar-me documentação onde esteja descrita?

O que conheço é o seguinte

fscanf(fp,"%s\n",str)

que vai ler toda a linha até ao '\n', ignorando-o.

Creio que o que disseste está errado. Essa instrução vai ler uma string até encontrar um caracter como o espaço, \n, ou outros caracteres que não pertencem a uma palavra. Após ler a string consome o '\n' da entrada se este existir (sem o \n no scanf o caracter '\n' mantem-se no buffer).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nop, ;) o pcaldeira esta correcto :thumbsup:

isto funciona e acho que uma vez um prof meu ja tinha falado nesse caracter[^\n]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Creio que o que disseste está errado. Essa instrução vai ler uma string até encontrar um caracter como o espaço, \n, ou outros caracteres que não pertencem a uma palavra.

Tens razão. Não tinha experimentado, mas era capaz de jurar que já tinha utilizado o método que disse antes. Parece que afinal não tinha ;)

Após ler a string consome o '\n' da entrada se este existir (sem o \n no scanf o caracter '\n' mantem-se no buffer).

Foi exactamente o que quis dizer. Ignora-o => não o coloca na string. No entanto não importa, porque afinal o scanf trata todos os caracteres whitespace de forma igual.

nop, :D o pcaldeira esta correcto :thumbsup:

Ninguém disse que não estava.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora