Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde
Comecei a ver sobre Arquivos, (abrir, manipular, fechar); to com um exercicio pra treinar só que não entendi direito como funciona pra acrescentar dados ou exibir a partir de um arquivo.
Faça um programa para criar um arquivo chamado Alunos.dat
Aqui tranquilo
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *arq;
if(arq = fopen("Alunos.dat","w") == NULL)
{
printf("Mensagem de Erro tal tal\n");
exit(0);
}
printf("Arquivo criado com sucesso!!!\n");
fclose(arq);
return 0;
}
cont. Inclua alunos nesse arquivo, deve ter (numero,aluno,curso,nota)
eu posso usar um struct aluno com todos esses dados, mas como eu coloco no arquivo?
outra coisa que raios é argc e argv[] pra que serve isso???
int main(int argc, char *argv[]).
Agradeço
Bom dia
Obrigado pela resposta Isis (você é essa da foto? que linda :love: )
>
Argc e argv são argumentos da função main que recebem dados da linha de comando (quando você inicia o programa compilado).
Que dados seriam esses? eu li que o primeiro argumento (0) é o nome do programa, mas e esses outros dados quais são?
>
O exercício pede algum formato p/ separar as informações de um aluno?
Pede nada.
printf("Arquivo criado com sucesso!!!\n");
aluno novo;
novo.numero = 1234;
novo.nome = "João Roberto";
novo.curso = "Administração";
novo.nota = 3.45F;
puts("Gravando informações do aluno...");
fprintf(arq, "%d,%s,%s,%.2f\n", novo.numero, novo.nome, novo.curso, novo.nota);
fclose(arq);
Ah entendi eu pego os dados normal e depois passo o valor das variáveis com a funçao fprintf().
E se eu tiver um for()?
seria:
for(i=0;i<5;i++)
{
printf("Arquivo criado com sucesso!!!\n");
aluno novo;
novo[i].numero = 1234;
novo[i].nome = "João Roberto";
novo[i].curso = "Administração";
novo[i].nota = 3.45F;
puts("Gravando informações do aluno...");
fprintf(arq, "%d,%s,%s,%.2f\n", novo[i].numero, novo[i].nome, novo[i].curso, novo[i].nota);
fclose(arq);
}
Não tem perigo de sobrescrever os dados no arquivo?
>
Sugestões p/ o código:
1- Separe a atribuição da comparação. Fica mais legível.
2- Quando a operação puder dar errado devido a diversas causas, não se incomode em ficar procurando condições a serem verificadas e mensagens a serem exibidas. O padrão C "define" uma biblioteca chamada errno.h que "se integra com o sistema" (por falta de expressão melhor). Nos casos mais básicos você só precisa incluir o errno.h e verificar se a variável errno for definida. Exemplo com o mesmo código postado:
1- Ok farei isso da próxima vez
2- vou dar uma olhada nessa biblioteca <errno.h>.
Mais uma dúvida, e para ler os dados desse arquivo?
Obrigado
Oh fiz com um for(), deu certo fica tudo salvo no arquivo. Porém quando termina o laço o programa encerra de uma vez, nem mostra o ultimo printf, pq isso acontece?
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
struct cadastro{
unsigned int numero;
char nome[30];
char curso[30];
float nota;
};
int main()
{
int i;
cadastro aluno[3];
FILE *arq = fopen("MatriculaAluno.dat","w");
if(errno)
{
printf("%m");
exit(0);
}
printf("Arquivo criado com sucesso!!!\n");
printf("\n");
printf("Cadastro de alunos:\n");
for(i=0;i<3;i++)
{
printf("Digite o numero do aluno\n");
scanf("%d%*c",&aluno[i].numero);
printf("Digite o nome do aluno\n");
gets(aluno[i].nome);
printf("Digite o curso do aluno\n");
gets(aluno[i].curso);
printf("Digite nota do aluno\n");
scanf("%f",&aluno[i].nota);
printf("---------------------------\n");
fprintf(arq,"%d, %s, %s, %.2f\n",aluno[i].numero, aluno[i].nome, aluno[i].curso, aluno[i].nota);
}
printf("Dados cadastrados com sucesso!!!\nTecle ENTER para sair\n");
fclose(arq);
return 0;
}O core deve ter sido corrompido.
Normalmente isso acontece quando você passa do final da array, é o caso mais comum. Mas não parece o caso.
Depois se eu tiver tempo dou uma olhada melhor... um debugger ajuda muito nisso ^^
Abraços :D
>
O core deve ter sido corrompido.
Normalmente isso acontece quando você passa do final da array, é o caso mais comum. Mas não parece o caso.
Depois se eu tiver tempo dou uma olhada melhor... um debugger ajuda muito nisso ^^
Abraços :D
Aow renato você tá bom?
Cara desculpa a ignorancia, mas quem é esse core?
Procurei no google mas só achei:
processador core;
cores;
até core draw :huh:
Descobri o erro, eu usei scanf("%f",&taltal) nao limpei o buffer da funçao, e eu fiz esse código no dev-C++ nele tem q colocar uma função pra parar a tela quando chega no final normalmente uso scanf("%*c");
Eu usei o dev-C pq aqui nao tem outro, mas vou instalar, sério nao uso mais dev-C (valeu Renato por me apresentar o Code::Block :thumbsup: )
Core dumped, superficialmente e resumidamente é um erro que acontece quando dá algum problema na execução do seu programa. O Linux para a execução e acusa essa mensagem. No windows dá uma mensagem de 'parou de funcionar'.
Bom que resolveu então, ignorei que poderia ser o buffer ^^
Abraços :D
Argc e argv são argumentos da função main que recebem dados da linha de comando (quando você inicia o programa compilado).
Argc é um inteiro e indica a quantidade de argumentos passados. Argv é um char ** e contém os argumentos passados p/ o programa.
O exercício pede algum formato p/ separar as informações de um aluno?
#include <stdio.h>
#include <stdlib.h>
typedef struct st_aluno {
int main()
{
Sugestões p/ o código:
1- Separe a atribuição da comparação. Fica mais legível.
2- Quando a operação puder dar errado devido a diversas causas, não se incomode em ficar procurando condições a serem verificadas e mensagens a serem exibidas. O padrão C "define" uma biblioteca chamada errno.h que "se integra com o sistema" (por falta de expressão melhor). Nos casos mais básicos você só precisa incluir o errno.h e verificar se a variável errno for definida. Exemplo com o mesmo código postado:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
typedef struct st_aluno {
int main()
{
A vantagem é que o sistema é o responsável pela "geração" da mensagem de erro. você só tem que imprimir na tela. Veja alguns casos de erro da função fopen em Manpage fopen