Ir ao conteúdo

Dúvida em C


Kodiak

Posts recomendados

Postado

Boa Tarde a todos. Estou com um probleminha em C.

Considere a existência de dois arquivos textos. No primeiro arquivo, denominado nomes.txt, encontra-se uma lista de nomes de alunos, um por linha (cada nome tem, no máximo, 80 caracteres). No segundo arquivo, denominado notas.txt, encontra-se a lista das notas dos alunos. Para cada linha do primeiro arquivo, existe uma linha no segundo arquivo com as três notas obtidas pelo aluno em uma disciplina. Não existem linhas em brancos nos arquivos, e o número de linhas existentes nos dois arquivos é igual. Um exemplo destes arquivos é mostrado a seguir:

nomes.txt

Fulano Pereira

Beltrano Silva

Sicrano Santos

Fulana Souza

notas.txt

9.1 7.5 6.8

5.6 4.6 7.0

7.5 4.6 5.8

8.0 8.0 6.0

Escreva um programa completo que leia os conteúdos de dois arquivos (“nomes.txt” e “notas.txt”) com o formato acima e crie um terceiro arquivo, com o nome “saida.txt”, com a lista dos alunos com suas respectivas médias obtidas nas provas: cada linha do arquivo de saída deve conter o nome do aluno seguido da média correspondente, com duas casas decimais. Se os dois arquivos acima fossem usados num exemplo, a saída obtida seria:

saida.txt

Fulano Pereira 7.80

Beltrano Silva 5.73

Sicrano Santos 5.97

Fulana Souza 7.33

Pode-se considerar que sempre será possível abrir os arquivos.

Meu código, tá dando uns erros estranhos, alguém me ajuda

#include <stdio.h>

#include <ctype.h>

int main (void)

{

FILE*notas;

FILE*nomes;

FILE*saida;

char linha[81];

char entrada[81];

float nota1,nota2,nota3,media;

notas=fopen("notas.txt","rt");

if (notas=NULL)

{

printf("Erro na abertura do arquivo \n");

exit(1);

}

nomes=fopen("nomes.txt","rt");

if (nomes=NULL)

{

printf("Erro na abertura do arquivo \n");

exit(1);

}

saida=fopen("saida.txt","wt");

if (saida=NULL)

{

printf("Erro na abertura do arquivo \n");

exit(1);

}

while (fgets (linha,80,nomes)!=NULL)

{

fscanf(nomes,"%s",&entrada);

fscanf(notas,"%f %f %f",&nota1,&nota2,&nota3);

}

media=(notas1+notas2+notas3)/3;

fprintf(saida,"%s %.2f",entrada ,media);

fclose(notas);

fclose(nomes);

return 0;

}

Postado
Kodiak, você poderia dizer que erro(s) está(ão) ocorrendo?

Cara essa questão eu já resolvi, valeu mesmo, porém agora tem outra mais cabeluda.

Considere um cadastro de pessoas que armazena nome e data de nascimento (representada por três inteiros: dia, mês, ano). O cadastro é representado por um vetor de ponteiros para a estrutura abaixo, ordenado em ordem crescente de data de

nascimento:

struct pessoa {

char nome[81]; /* nome */

int dia, mes, ano; /* data de nascimento */

};

typedef struct pessoa Pessoa;

Aplicando a técnica de busca binária, implemente uma função que verifique se alguém nasceu numa determinada data. A função deve receber o número de elementos no vetor, o vetor de ponteiros e a data que se deseja fazer a busca. Caso seja

encontrada uma pessoa que tenha nascido na data especificada, a função deve retornar o ponteiro para a estrutura Pessoa correspondente. Se existir mais de uma pessoa que tenha nascido na data procurada, a função deve retornar o ponteiro para a primeira estrutura encontrada. Se não existir uma pessoa no cadastro que tenha nascido na data especificada, a função deve retornar NULL. A função deve obedecer ao seguinte protótipo:

Pessoa* busca (int n, Pessoa** v, int dia, int mes, int ano);

O meu código é esse.

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

struct pessoa {

char nome[81];

int dia, mes, ano;

};

typedef struct pessoa Pessoa;

Pessoa* busca (int n, Pessoa** v, int dia, int mes, int ano)

{

int i;

int f=n-1;

int meio;

while (i<=f)

{

meio=(i+f)/2;

if((ano>v[meio]->Pessoa.ano)

{

i=meio+1;

}

else if(ano<v[meio]->Pessoa.ano)

{

f=meio-1;

}

else

meio=(i+f)/2;

if((mes>v[meio]->Pessoa.mes)

{

i=meio+1;

}

else if(mes<v[meio]->Pessoa.mes)

{

f=meio-1;

}

meio=(i+f)/2;

if((dia>v[meio]->Pessoa.dia)

{

i=meio+1;

}

else if(dia<v[meio]->Pessoa.dia)

{

f=meio-1;

}

return v[meio]

}

return NULL;

}

tá dando uma porrada de erros alguém me ajuda? :unsure:

post-42557-13884944756538_thumb.jpg

Postado

Cara...

Eu acho que essa struct fica fora do main.

Se você vai fazer a função embaixo do main, acho que ela deve escopo depois de você ter declarado a sua estrutura.

Um jeito mais tranquilo de fazer uma estrutura é:

typedef struct nome {
...
} Nome;

O Nome é usado quando você vai declarar variáveis do tipo daquela estrutura.

Eu realmente não entendi o que você está tentando fazer. Tem certeza de que você está programando em C? Na função main só ocorre a chamada de funções e o controle do seu programa... acho que tá faltando você dar uma olhada na sintaxe do programa, percorrer linha por linha e ver onde estão os erros com um bom livro do seu lado porque acho que tem muita coisa básica, como a estrutura que você está errando. Quer dizer, eu particularmente nunca vi isso.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...