Como transformar inteiro em float

1. Como transformar inteiro em float

Lucas Samuel dos santos
lukssds

(usa Outra)

Enviado em 15/12/2018 - 18:30h

Pessoal sou iniciante em programação cometi um erro grave ao fazer um trabalho para aula, criei um programa para cadastrar alunos de uma sala e declarei as notas como inteiro (int) e na verdade era pra ser float, tem alguma forma de corrigir isso ?


o programa segue a baixo :


#include <stdio.h>
#include <stdlib.h> // Biblioteca padrão par ausar os comandos exit e system("cls")
#include <stdbool.h> // Biblioteca para utilizar o tipo bool (True e False)
#include <string.h> // Biblioteca para manutenção de strings
#include <locale.h> // Biblioteca necessária para usar setlocale

#define TAM_MAX 40 // Tamanha máximo de estudantes

typedef struct
{
char nome[50];
char matricula[11];
char materia[15];
int notas[4];
int faltas;
int notafinal;
char situacao;
} Estudantes; // guarda os dados dos estudantes


void zeraEstudantes(Estudantes estudante[]){
for (int i = 0; i < TAM_MAX; i++){
for(int j = 0; j < 50; j++)
estudante[i].nome[j] = '\0';
for(int j = 0; j < 11; j++){
estudante[i].matricula[j] = '\0';
estudante[i].materia[j] = '\0';
}for(int j = 0; j < 4; j++)
estudante[i].notas[j] = 0;
estudante[i].faltas = 0;
estudante[i].notafinal = 0;
estudante[i].situacao = '\0';
}
return;
}

void lerTurmaExistente(Estudantes estudante[], char nomeArquivo[], int *estLidos){
char nomeArquivoTemp[] = "\0"; // nome temporario do arquivo
char buf[50] = {'\0'}; // temporário para o nome dos estudantes
FILE *fp = NULL;

printf("\nDigite o nome do arquivo com a turma: ");
scanf("%s", nomeArquivoTemp);
system("cls");

fp = fopen(nomeArquivoTemp, "r+");


if (fp != NULL) {
printf("\nArquivo %s lido com sucesso!\n", nomeArquivoTemp);
for (int j = 0; j < 50; ++j)
nomeArquivo[j] = nomeArquivoTemp[j];

zeraEstudantes(estudante);

int i = 0;
while( !feof(fp) && i < TAM_MAX){ // feof testa se chegou no final do arquivo.
memset(buf, '\0', sizeof(buf)); // Zera o buffer.

// Lê o nome para a string temporária buf.
if (fgets(buf, sizeof(buf), fp) == NULL){
fprintf(stderr, "ATENÇÃO, LISTA VAZIA.\n");
//exit(1);
} else {
// Retira o \n do final da string lida.
buf[strcspn(buf, "\n")] = '\0';

// Copia de buf para o campo nome do i-esimo estudante
strcpy(estudante[i].nome, buf);
}

fscanf(fp, "%s\n", estudante[i].matricula);
fscanf(fp, "%s\n", estudante[i].materia);
for(int j = 0; j < 4; j++)
fscanf(fp, "%d\n", &estudante[i].notas[j]);
fscanf(fp, "%d\n", &estudante[i].faltas);
fscanf(fp, "%d\n", &estudante[i].notafinal);
fscanf(fp, "%c\n", &estudante[i].situacao);


i++;

*estLidos = i;
}

fclose(fp);
}else{
printf("Arquivo %s nao existe!\n", nomeArquivoTemp);
return;
}


return;
}


void criarTurma(char nomeArquivo[]){

char opcao;
FILE *fp = NULL;
char nomeArquivoTemp[50];

printf("\nDigite o nome do arquivo para a nova turma: ");
scanf("%s", nomeArquivoTemp);
system("cls");

fp = fopen(nomeArquivoTemp, "r");

if (fp == NULL){
//fclose(fp);

for (int i = 0; i < 50; ++i)
{
nomeArquivo[i] = nomeArquivoTemp[i];
}

fp = fopen(nomeArquivo, "w");
fprintf(stderr, "\nArquivo %s criado com sucesso!\n", nomeArquivo);

fclose(fp);
}else{

printf("Arquivo %s já existe. Deseja sobrescrevê-lo? (S/N) ", nomeArquivoTemp);
getchar();
scanf("%c", &opcao);
system("cls");

if (opcao == 'S'){
for (int i = 0; i < 50; ++i)
nomeArquivo[i] = nomeArquivoTemp[i];

fp = fopen(nomeArquivo, "w+");
fprintf(stderr, "Arquivo %s criado com sucesso!\n\n", nomeArquivoTemp);

fclose(fp);
}else if (opcao == 'N'){
return;
}else{
printf("Opção Inválida!\nDigite novamente: ");
getchar();
scanf("%c", &opcao);
}
}


return;
}

int lerTurma(Estudantes estudante[], char nomeArquivo[], int *estLidos){
int opcao = 0;

printf("\n#########################################\n");
printf(" Ler Turma\n");
printf("#########################################\n\n");
printf("Opções: \n\n");
printf("1 - Ler turma existente.\n");
printf("2 - Criar nova turma.\n");
printf("3 - Voltar ao menu principal.\n\n");
printf("Digite uma opção: ");
scanf("%d", &opcao);
system("cls");

while(opcao < 1 || opcao > 3){
printf("Opção Inválida!\nDigite novamente:\t");
scanf("%d", &opcao);
system("cls");
}

switch(opcao){
case 1:
lerTurmaExistente(estudante, nomeArquivo, estLidos);
break;
case 2:
criarTurma(nomeArquivo);
break;
default:
break;
}

return opcao;
}

void imprimirEstudantes(Estudantes estudante[], char nomeArquivo[], int *estLidos){
if (*estLidos == 0 || nomeArquivo[0] == '\0'){
if(nomeArquivo[0] == '\0'){
printf("\nNão há turma carregada!\n");
}else{
printf("\nSua lista está vazia!\n");
}
} else {
for(int i = 0; i < *estLidos; i++){
printf("\n##############################################################\n");
printf(" Estudante %d\n", i+1);
printf("##############################################################\n\n");
printf("Nome: %s\n", estudante[i].nome);
printf("Matrícula: %s\n", estudante[i].matricula);
printf("Matéria: %s\n", estudante[i].materia);
for(int j = 0; j < 4; j++){
printf("%d° Bimestre: %d\n", j+1, estudante[i].notas[j]); }
printf("Faltas: %d\n", estudante[i].faltas);
printf("Final: %d\n", estudante[i].notafinal);
printf("Situação: %c\n", estudante[i].situacao);
printf("\n##############################################################\n\n");

}
}
return;
}



void criaEstudante(Estudantes estudante[], int *estLidos){
printf("Digite a matrícula: ");
scanf("%s", estudante[*estLidos].matricula);
printf("Digite a matéria: ");
scanf("%s", estudante[*estLidos].materia);
printf("Digite as quatro notas bimestrais : ");
scanf("%d %d %d %d", &estudante[*estLidos].notas[0],
&estudante[*estLidos].notas[1],
&estudante[*estLidos].notas[2],
&estudante[*estLidos].notas[3]);
printf("Digite o número de faltas: ");
scanf("%d", &estudante[*estLidos].faltas);

estudante[*estLidos].notafinal = estudante[*estLidos].notas[0] +
estudante[*estLidos].notas[1] + estudante[*estLidos].notas[2] +
estudante[*estLidos].notas[3];
printf("Nota final calculada: %d\n", estudante[*estLidos].notafinal);

if(estudante[*estLidos].faltas > 50){
estudante[*estLidos].situacao = 'F';
printf("Situação final: Reprovado por Faltas\n");
}else if(estudante[*estLidos].notafinal < 60 && estudante[*estLidos].faltas <= 50){
estudante[*estLidos].situacao = 'R';
printf("Situação final: Reprovado\n");
}else if(estudante[*estLidos].notafinal > 60 && estudante[*estLidos].faltas <= 50){
estudante[*estLidos].situacao = 'A';
printf("Situação final: Aprovado\n");
}
return;
}

void cadastrarEstudante(Estudantes estudante[], char nomeArquivo[], int *estLidos){
if (estudante[(*estLidos)-1].nome[0] == '\0') {
*estLidos -= 1;
}

if (nomeArquivo[0] == '\0'){
printf("Nao há turma carregada!\n");
} else {

printf("\n#########################################\n");
printf(" Cadastrar Novo Estudante\n");
printf("#########################################\n\n");
printf("Digite o nome: ");
getchar();

if (fgets(estudante[*estLidos].nome, sizeof(estudante[*estLidos].nome), stdin) == NULL){
fprintf(stderr, "Erro ao ler o nome\n");
} else {
// retira o \n do final da string lida
estudante[*estLidos].nome[strcspn(estudante[*estLidos].nome, "\n")] = 0;
} // else
criaEstudante(estudante, estLidos);

*estLidos += 1;
}

return;
}

void calculaNota(Estudantes estudante[], int pos){
estudante[pos].notafinal = estudante[pos].notas[0] +
estudante[pos].notas[1] + estudante[pos].notas[2] + estudante[pos].notas[3];

if(estudante[pos].faltas > 50){
estudante[pos].situacao = 'F';
}else if(estudante[pos].notafinal < 60 && estudante[pos].faltas <= 50){
estudante[pos].situacao = 'R';
}else if(estudante[pos].notafinal > 60 && estudante[pos].faltas <= 50){
estudante[pos].situacao = 'A';
}
return;
}

void menuAlteraEstudante(Estudantes estudante[], int pos){
printf("\n#########################################\n");
printf(" Editar Informações do Estudante\n");
printf("#########################################\n");
printf("\nNome do estudante: %s\n\n", estudante[pos].nome);
printf("Opções: \n\n\n");
printf("1 - Alterar nome.\n");
printf("2 - Alterar matrícula.\n");
printf("3 - Alterar matéria.\n");
printf("4 - Alterar nota do 1° Bimestre.\n");
printf("5 - Alterar nota do 2° Bimestre.\n");
printf("6 - Alterar nota do 3° Bimestre.\n");
printf("7 - Alterar nota do 4° Bimestre.\n");
printf("8 - Alterar numero de faltas.\n");
printf("9 - Voltar ao menu anterior.\n");
printf("\nDigite uma opção: ");
return;
}

int alteraEstudante(Estudantes estudante[], int pos){
int opcao = 0;
menuAlteraEstudante(estudante, pos);
scanf("%d", &opcao);
system("cls");

while(opcao < 1 || opcao > 9){
printf("Opção Inválida!\nDigite novamente: ");
scanf("%d", &opcao);
system("cls");
}

switch(opcao){
case 1:
printf("Digite o nome: ");
getchar();
if (fgets(estudante[pos].nome, sizeof(estudante[pos].nome), stdin) == NULL){
fprintf(stderr, "Erro ao ler o nome\n");
} else {
// retira o \n do final da string lida
estudante[pos].nome[strcspn(estudante[pos].nome, "\n")] = 0;
} // else
break;
case 2:
printf("Digite a matricula: ");
scanf("%s", estudante[pos].matricula);
break;
case 3:
printf("Digite a matéria: ");
scanf("%s", estudante[pos].materia);
break;
case 4:
printf("Digite a nota do 1° Bimestre: ");
scanf("%d", &estudante[pos].notas[0]);
calculaNota(estudante, pos);
break;
case 5:
printf("Digite a nota do 2° Bimestre: ");
scanf("%d", &estudante[pos].notas[1]);
calculaNota(estudante, pos);
break;
case 6:
printf("Digite a nota do 3° Bimestre: ");
scanf("%d", &estudante[pos].notas[2]);
calculaNota(estudante, pos);
case 7:
printf("Digite a nota do 4° Bimestre: ");
scanf("%d", &estudante[pos].notas[3]);
calculaNota(estudante, pos);
break;
case 8:
printf("Digite o número de faltas: ");
scanf("%d", &estudante[pos].faltas);
calculaNota(estudante, pos);
break;
default:
break;
}
return 9;
}

bool buscaMatricula(Estudantes estudante[], int *tam, char alvo[], int *pos){
int i = 0; // indice do arranjo
bool encontrado = false;

i = 0;
while (i < *tam && strcmp(alvo, estudante[i].matricula) != 0)
i++;

*pos = i;
if(strcmp(alvo, estudante[i].matricula) == 0)
encontrado = true;

return encontrado;
}

void selecionarPorMatricula(Estudantes estudante[], int *estLidos){
int opcao = 0;
char mat[11] = {'\0'};

printf("\nDigite o número de matrícula: ");
scanf("%s", mat);
system("cls");

int i = 0;
int pos = 0;

if(buscaMatricula(estudante, estLidos, mat, &pos)){
while(opcao != 9){
opcao = alteraEstudante(estudante, pos);
}
}
else{
printf("Numero de matrícula inválido!\n");
}
return;
}

bool buscaNome(Estudantes estudante[], int *tam, char alvo[], int *pos){
int i = 0; // indice do arranjo
bool encontrado = false;

i = 0;
while (i < *tam && strcmp(alvo, estudante[i].nome) != 0)
i++;

*pos = i;
if(strcmp(alvo, estudante[i].nome) == 0)
encontrado = true;

return encontrado;
}

void selecionarPorNome(Estudantes estudante[], int *estLidos){
int opcao = 0;
char nome[50] = {'\0'};

printf("\nDigite o nome do estudante: ");
getchar();

if (fgets(nome, sizeof(nome), stdin) == NULL){
fprintf(stderr, "Erro ao ler o nome\n");
} else {
// retira o \n do final da string lida
nome[strcspn(nome, "\n")] = 0;
} // else

int i = 0;
int pos = 0;

if(buscaNome(estudante, estLidos, nome, &pos)){
while(opcao != 9){
opcao = alteraEstudante(estudante, pos);
}
}else{
printf("Nome inválido!\n");
}
return;
}

void menuEditaEstudante(void){
printf("\n#########################################\n");
printf(" Editar Informações do Estudante\n");
printf("#########################################\n\n");
printf("Opções: \n\n");

printf("1 - Selecionar por número de matrícula.\n");
printf("2 - Selecionar por nome.\n");
printf("3 - Voltar ao menu principal.\n");

printf("\nDigite uma opção: ");
return;
}

int editarEstudante(Estudantes estudante[], char nomeArquivo[], int *estLidos){
int opcao = 0;
int opcao2 = 0;
int opcao3 = 0;

if (estudante[0].nome[0] == '\0'){
printf("Nao há turma carregada!\n");
opcao = 3;
} else {
menuEditaEstudante();
scanf("%d", &opcao);
system("cls");

while(opcao < 1 || opcao > 3){
printf("Opcão Inválida!\nDigite novamente: ");
scanf("%d", &opcao);
system("cls");
}

switch(opcao){
case 1:
selecionarPorMatricula(estudante, estLidos);
break;
case 2:
selecionarPorNome(estudante, estLidos);
break;
default:
break;
}

}
return opcao;
}

void relerTurma(Estudantes estudante[], char nomeArquivo[], int *estLidos){
char buf[50] = {'\0'}; // temporário para o nome dos estudantes
FILE *fp = NULL;

fp = fopen(nomeArquivo, "r");
if (fp != NULL) {
printf("Arquivo %s lido com sucesso!\n", nomeArquivo);
zeraEstudantes(estudante);

int i = 0;
while( !feof(fp) && i < TAM_MAX){ // feof testa se chegou no final do arquivo.
memset(buf, '\0', sizeof(buf)); // Zera o buffer.

// Lê o nome para a string temporária buf.
if (fgets(buf, sizeof(buf), fp) == NULL){
fprintf(stderr, "ATENÇÃO, LISTA VAZIA.\n");
//exit(1);
} else {
// Retira o \n do final da string lida.
buf[strcspn(buf, "\n")] = '\0';

// Copia de buf para o campo nome do i-esimo estudante
strcpy(estudante[i].nome, buf);
}

fscanf(fp, "%s\n", estudante[i].matricula);
fscanf(fp, "%s\n", estudante[i].materia);
for(int j = 0; j < 3; j++)
fscanf(fp, "%d\n", &estudante[i].notas[j]);
fscanf(fp, "%d\n", &estudante[i].faltas);
fscanf(fp, "%d\n", &estudante[i].notafinal);
fscanf(fp, "%c\n", &estudante[i].situacao);


i++;

*estLidos = i;
}

fclose(fp);
}else{
printf("Arquivo %s não existe!\n", nomeArquivo);
}

return;
}


void salvarSair(Estudantes estudante[], char nomeArquivo[], int *estLidos){
if (nomeArquivo[0] == '\0'){
char op;
char nome[50] = {'\0'};
printf("O arquivo não existe. Deseja criar um novo? (S/N): ");
getchar();
scanf("%c",&op);
system("cls");

if(op == 'S' || op == 's'){
FILE *fp = NULL;
printf("Digite o nome do arquivo: ");
scanf("%s", nome);
system("cls");
fp = fopen(nome, "w");
for(int i = 0; i < *estLidos; i++){
fprintf(fp, "%s\n", estudante[i].nome);
fprintf(fp, "%s\n", estudante[i].matricula);
fprintf(fp, "%s\n", estudante[i].materia);
for(int j = 0; j < 3; j++)
fprintf(fp, "%d\n", estudante[i].notas[j]);
fprintf(fp, "%d\n", estudante[i].faltas);
fprintf(fp, "%d\n", estudante[i].notafinal);
fprintf(fp, "%c\n", estudante[i].situacao);
}
fclose(fp);
printf("Salvo com sucesso\n");
}
else if(op == 'N' || op == 'n')
{
printf("Saindo sem salvar...\n");
return;
}
}
else
{
char op;
printf("O arquivo já existe. Deseja sobrescrevê-lo? (S/N)\n");
getchar();
scanf("%c",&op);
system("cls");
if(op == 'S' || op == 's'){
FILE *fp = NULL;
fp = fopen(nomeArquivo, "w+");
for(int i = 0; i < *estLidos; i++){
fprintf(fp, "%s\n", estudante[i].nome);
fprintf(fp, "%s\n", estudante[i].matricula);
fprintf(fp, "%s\n", estudante[i].materia);
for(int j = 0; j < 3; j++)
fprintf(fp, "%d\n", estudante[i].notas[j]);
fprintf(fp, "%d\n", estudante[i].faltas);
fprintf(fp, "%d\n", estudante[i].notafinal);
fprintf(fp, "%c\n", estudante[i].situacao);
}
fclose(fp);
printf("\nSalvo com sucesso!\n");
}
else if(op == 'N' || op == 'n')
{
printf("Saindo sem salvar...\n");
return;
}
}
return;
}

void exibeMenuPrincipal(void){
printf("\n#########################################\n", setlocale(LC_ALL,""));
printf(" Menu Principal\n");
printf("#########################################\n\n");
printf("Opções: \n\n");
printf("1 - Ler turma de estudantes do arquivo.\n");
printf("2 - Imprimir turma de estudantes.\n");
printf("3 - Cadastrar novo estudante.\n");
printf("4 - Editar informações de um estudante.\n");
printf("5 - Reler turma de estudantes do arquivo.\n");
printf("6 - Salvar e Sair.\n");
printf("7 - Sair sem Salvar.\n\n");
printf("Digite uma opção: ");
return;
}

int menuPrincipal(Estudantes estudante[], char nomeArquivo[], int *estLidos){
int opcao = 0;
int opcao2 = 0;
int opcao3 = 0;

exibeMenuPrincipal();
scanf("%d", &opcao);
system("cls");

while(opcao < 1 || opcao > 7){
printf("Opção Inválida!\nDigite novamente: ");
scanf("%d", &opcao);
system("cls");
}

switch(opcao){
case 1:
while(opcao2 != 3){
opcao2 = lerTurma(estudante, nomeArquivo, estLidos);
}
break;
case 2:
imprimirEstudantes(estudante, nomeArquivo, estLidos);
break;
case 3:
cadastrarEstudante(estudante, nomeArquivo, estLidos);
break;
case 4:
while(opcao3 != 3){
opcao3 = editarEstudante(estudante, nomeArquivo, estLidos);
}
break;
case 5:
relerTurma(estudante, nomeArquivo, estLidos);
break;
case 6:
salvarSair(estudante, nomeArquivo, estLidos);
printf("Até a proxima...\n");
exit(0);
break;
default:
exit(0);
system("pause");
}

return opcao;
}

int main(void){
int opcao = 0;
Estudantes estudante[TAM_MAX] = {{"\0", "\0",0, 0, '\0'}};
char nomeArquivo[50] = {'\0'};
int estLidos = 0;

while(opcao != 7){
opcao = menuPrincipal(estudante, nomeArquivo, &estLidos);
}
system("pause");
return 0;
}



  


2. Re: Como transformar inteiro em float

-
BiaMonteiro

(usa Arch Linux)

Enviado em 15/12/2018 - 18:46h

Sim, há formas de converter inteiro para float.

Dê uma olhada neste exemplo:
#include <stdio.h>

int main(){
int inteiro = 2;

float flutuante = (float) inteiro;

printf("%f\n", flutuante);

return 0;
}


Uma coisa que recomendo é você, por exemplo, não usar int nota, mas sim float nota ou double nota.


3. Re: Como transformar inteiro em float

Lucas Samuel dos santos
lukssds

(usa Outra)

Enviado em 15/12/2018 - 20:15h

tentei mudar pra float as notas, mas na hora q eu coloco uma nota ele encerra o programa, nao sei o q fazer mais :(
#include <stdio.h>
#include <stdlib.h> // Biblioteca padrão par ausar os comandos exit e system("cls")
#include <stdbool.h> // Biblioteca para utilizar o tipo bool (True e False)
#include <string.h> // Biblioteca para manutenção de strings
#include <locale.h> // Biblioteca necessária para usar setlocale

#define TAM_MAX 40 // Tamanha máximo de estudantes

typedef struct
{
char nome[50];
char matricula[11];
char materia[15];
float notas[4];
int faltas;
float notafinal;
char situacao;
} Estudantes; // guarda os dados dos estudantes


void zeraEstudantes(Estudantes estudante[]){
for (int i = 0; i < TAM_MAX; i++){
for(int j = 0; j < 50; j++)
estudante[i].nome[j] = '\0';
for(int j = 0; j < 11; j++){
estudante[i].matricula[j] = '\0';
estudante[i].materia[j] = '\0';
}for(int j = 0; j < 4; j++)
estudante[i].notas[j] = 0;
estudante[i].faltas = 0;
estudante[i].notafinal = 0;
estudante[i].situacao = '\0';
}
return;
}

void lerTurmaExistente(Estudantes estudante[], char nomeArquivo[], int *estLidos){
char nomeArquivoTemp[] = "\0"; // nome temporario do arquivo
char buf[50] = {'\0'}; // temporário para o nome dos estudantes
FILE *fp = NULL;

printf("\nDigite o nome do arquivo com a turma: ");
scanf("%s", nomeArquivoTemp);
system("cls");

fp = fopen(nomeArquivoTemp, "r+");


if (fp != NULL) {
printf("\nArquivo %s lido com sucesso!\n", nomeArquivoTemp);
for (int j = 0; j < 50; ++j)
nomeArquivo[j] = nomeArquivoTemp[j];

zeraEstudantes(estudante);

int i = 0;
while( !feof(fp) && i < TAM_MAX){ // feof testa se chegou no final do arquivo.
memset(buf, '\0', sizeof(buf)); // Zera o buffer.

// Lê o nome para a string temporária buf.
if (fgets(buf, sizeof(buf), fp) == NULL){
fprintf(stderr, "ATENÇÃO, LISTA VAZIA.\n");
//exit(1);
} else {
// Retira o \n do final da string lida.
buf[strcspn(buf, "\n")] = '\0';

// Copia de buf para o campo nome do i-esimo estudante
strcpy(estudante[i].nome, buf);
}

fscanf(fp, "%s\n", estudante[i].matricula);
fscanf(fp, "%s\n", estudante[i].materia);
for(int j = 0; j < 4; j++)
fscanf(fp, "%f\n", &estudante[i].notas[j]);
fscanf(fp, "%d\n", &estudante[i].faltas);
fscanf(fp, "%f\n", &estudante[i].notafinal);
fscanf(fp, "%c\n", &estudante[i].situacao);


i++;

*estLidos = i;
}

fclose(fp);
}else{
printf("Arquivo %s nao existe!\n", nomeArquivoTemp);
return;
}


return;
}


void criarTurma(char nomeArquivo[]){

char opcao;
FILE *fp = NULL;
char nomeArquivoTemp[50];

printf("\nDigite o nome do arquivo para a nova turma: ");
scanf("%s", nomeArquivoTemp);
system("cls");

fp = fopen(nomeArquivoTemp, "r");

if (fp == NULL){
//fclose(fp);

for (int i = 0; i < 50; ++i)
{
nomeArquivo[i] = nomeArquivoTemp[i];
}

fp = fopen(nomeArquivo, "w");
fprintf(stderr, "\nArquivo %s criado com sucesso!\n", nomeArquivo);

fclose(fp);
}else{

printf("Arquivo %s já existe. Deseja sobrescrevê-lo? (S/N) ", nomeArquivoTemp);
getchar();
scanf("%c", &opcao);
system("cls");

if (opcao == 'S'){
for (int i = 0; i < 50; ++i)
nomeArquivo[i] = nomeArquivoTemp[i];

fp = fopen(nomeArquivo, "w+");
fprintf(stderr, "Arquivo %s criado com sucesso!\n\n", nomeArquivoTemp);

fclose(fp);
}else if (opcao == 'N'){
return;
}else{
printf("Opção Inválida!\nDigite novamente: ");
getchar();
scanf("%c", &opcao);
}
}


return;
}

int lerTurma(Estudantes estudante[], char nomeArquivo[], int *estLidos){
int opcao = 0;

printf("\n#########################################\n");
printf(" Ler Turma\n");
printf("#########################################\n\n");
printf("Opções: \n\n");
printf("1 - Ler turma existente.\n");
printf("2 - Criar nova turma.\n");
printf("3 - Voltar ao menu principal.\n\n");
printf("Digite uma opção: ");
scanf("%d", &opcao);
system("cls");

while(opcao < 1 || opcao > 3){
printf("Opção Inválida!\nDigite novamente:\t");
scanf("%d", &opcao);
system("cls");
}

switch(opcao){
case 1:
lerTurmaExistente(estudante, nomeArquivo, estLidos);
break;
case 2:
criarTurma(nomeArquivo);
break;
default:
break;
}

return opcao;
}

void imprimirEstudantes(Estudantes estudante[], char nomeArquivo[], int *estLidos){
if (*estLidos == 0 || nomeArquivo[0] == '\0'){
if(nomeArquivo[0] == '\0'){
printf("\nNão há turma carregada!\n");
}else{
printf("\nSua lista está vazia!\n");
}
} else {
for(int i = 0; i < *estLidos; i++){
printf("\n##############################################################\n");
printf(" Estudante %d\n", i+1);
printf("##############################################################\n\n");
printf("Nome: %s\n", estudante[i].nome);
printf("Matrícula: %s\n", estudante[i].matricula);
printf("Matéria: %s\n", estudante[i].materia);
for(int j = 0; j < 4; j++){
printf("%d° Bimestre: %d\n", j+1, estudante[i].notas[j]); }
printf("Faltas: %d\n", estudante[i].faltas);
printf("Final: %f\n", estudante[i].notafinal);
printf("Situação: %c\n", estudante[i].situacao);
printf("\n##############################################################\n\n");

}
}
return;
}



void criaEstudante(Estudantes estudante[],int *estLidos){

printf("Digite a matrícula: ");
scanf("%s", estudante[*estLidos].matricula);
printf("Digite a matéria: ");
scanf("%s", estudante[*estLidos].materia);
printf("Digite as quatro notas bimestrais : ");
scanf("%f %f %f %f", &estudante[*estLidos].notas[0],
&estudante[*estLidos].notas[1],
&estudante[*estLidos].notas[2],
&estudante[*estLidos].notas[3]);
printf("Digite o número de faltas: ");
scanf("%d", &estudante[*estLidos].faltas);

estudante[*estLidos].notafinal = estudante[*estLidos].notas[0] +
estudante[*estLidos].notas[1] + estudante[*estLidos].notas[2] +
estudante[*estLidos].notas[3] ;
printf("Nota final calculada: %f\n", estudante[*estLidos].notafinal);

if(estudante[*estLidos].faltas > 50){
estudante[*estLidos].situacao = 'F';
printf("Situação final: Reprovado por Faltas\n");
}else if(estudante[*estLidos].notafinal < 60 && estudante[*estLidos].faltas <= 50){
estudante[*estLidos].situacao = 'R';
printf("Situação final: Reprovado\n");
}else if(estudante[*estLidos].notafinal > 60 && estudante[*estLidos].faltas <= 50){
estudante[*estLidos].situacao = 'A';
printf("Situação final: Aprovado\n");
}
return;
}

void cadastrarEstudante(Estudantes estudante[], char nomeArquivo[], int *estLidos){
if (estudante[(*estLidos)-1].nome[0] == '\0') {
*estLidos -= 1;
}
float notas[4];
if (nomeArquivo[0] == '\0'){
printf("Nao há turma carregada!\n");
} else {

printf("\n#########################################\n");
printf(" Cadastrar Novo Estudante\n");
printf("#########################################\n\n");
printf("Digite o nome: ");
getchar();

if (fgets(estudante[*estLidos].nome, sizeof(estudante[*estLidos].nome), stdin) == NULL){
fprintf(stderr, "Erro ao ler o nome\n");
} else {
// retira o \n do final da string lida
estudante[*estLidos].nome[strcspn(estudante[*estLidos].nome, "\n")] = 0;
} // else
criaEstudante(estudante, estLidos);

*estLidos += 1;
}

return;
}

void calculaNota(Estudantes estudante[], int pos){
estudante[pos].notafinal = estudante[pos].notas[0] +
estudante[pos].notas[1] + estudante[pos].notas[2] + estudante[pos].notas[3];

if(estudante[pos].faltas > 50){
estudante[pos].situacao = 'F';
}else if(estudante[pos].notafinal < 60&& estudante[pos].faltas <= 50){
estudante[pos].situacao = 'R';
}else if(estudante[pos].notafinal > 60 && estudante[pos].faltas <= 50){
estudante[pos].situacao = 'A';
}
return;
}

void menuAlteraEstudante(Estudantes estudante[], int pos){
printf("\n#########################################\n");
printf(" Editar Informações do Estudante\n");
printf("#########################################\n");
printf("\nNome do estudante: %s\n\n", estudante[pos].nome);
printf("Opções: \n\n\n");
printf("1 - Alterar nome.\n");
printf("2 - Alterar matrícula.\n");
printf("3 - Alterar matéria.\n");
printf("4 - Alterar nota do 1° Bimestre.\n");
printf("5 - Alterar nota do 2° Bimestre.\n");
printf("6 - Alterar nota do 3° Bimestre.\n");
printf("7 - Alterar nota do 4° Bimestre.\n");
printf("8 - Alterar numero de faltas.\n");
printf("9 - Voltar ao menu anterior.\n");
printf("\nDigite uma opção: ");
return;
}

int alteraEstudante(Estudantes estudante[], int pos){
int opcao = 0;
menuAlteraEstudante(estudante, pos);
scanf("%d", &opcao);
system("cls");

while(opcao < 1 || opcao > 9){
printf("Opção Inválida!\nDigite novamente: ");
scanf("%d", &opcao);
system("cls");
}

switch(opcao){
case 1:
printf("Digite o nome: ");
getchar();
if (fgets(estudante[pos].nome, sizeof(estudante[pos].nome), stdin) == NULL){
fprintf(stderr, "Erro ao ler o nome\n");
} else {
// retira o \n do final da string lida
estudante[pos].nome[strcspn(estudante[pos].nome, "\n")] = 0;
} // else
break;
case 2:
printf("Digite a matricula: ");
scanf("%s", estudante[pos].matricula);
break;
case 3:
printf("Digite a matéria: ");
scanf("%s", estudante[pos].materia);
break;
case 4:
printf("Digite a nota do 1° Bimestre: ");
scanf("%f", &estudante[pos].notas[0]);
calculaNota(estudante, pos);
break;
case 5:
printf("Digite a nota do 2° Bimestre: ");
scanf("%f", &estudante[pos].notas[1]);
calculaNota(estudante, pos);
break;
case 6:
printf("Digite a nota do 3° Bimestre: ");
scanf("%f", &estudante[pos].notas[2]);
calculaNota(estudante, pos);
case 7:
printf("Digite a nota do 4° Bimestre: ");
scanf("%f", &estudante[pos].notas[3]);
calculaNota(estudante, pos);
break;
case 8:
printf("Digite o número de faltas: ");
scanf("%d", &estudante[pos].faltas);
calculaNota(estudante, pos);
break;
default:
break;
}
return 9;
}

bool buscaMatricula(Estudantes estudante[], int *tam, char alvo[], int *pos){
int i = 0; // indice do arranjo
bool encontrado = false;

i = 0;
while (i < *tam && strcmp(alvo, estudante[i].matricula) != 0)
i++;

*pos = i;
if(strcmp(alvo, estudante[i].matricula) == 0)
encontrado = true;

return encontrado;
}

void selecionarPorMatricula(Estudantes estudante[], int *estLidos){
int opcao = 0;
char mat[11] = {'\0'};

printf("\nDigite o número de matrícula: ");
scanf("%s", mat);
system("cls");

int i = 0;
int pos = 0;

if(buscaMatricula(estudante, estLidos, mat, &pos)){
while(opcao != 9){
opcao = alteraEstudante(estudante, pos);
}
}
else{
printf("Numero de matrícula inválido!\n");
}
return;
}

bool buscaNome(Estudantes estudante[], int *tam, char alvo[], int *pos){
int i = 0; // indice do arranjo
bool encontrado = false;

i = 0;
while (i < *tam && strcmp(alvo, estudante[i].nome) != 0)
i++;

*pos = i;
if(strcmp(alvo, estudante[i].nome) == 0)
encontrado = true;

return encontrado;
}

void selecionarPorNome(Estudantes estudante[], int *estLidos){
int opcao = 0;
char nome[50] = {'\0'};

printf("\nDigite o nome do estudante: ");
getchar();

if (fgets(nome, sizeof(nome), stdin) == NULL){
fprintf(stderr, "Erro ao ler o nome\n");
} else {
// retira o \n do final da string lida
nome[strcspn(nome, "\n")] = 0;
} // else

int i = 0;
int pos = 0;

if(buscaNome(estudante, estLidos, nome, &pos)){
while(opcao != 9){
opcao = alteraEstudante(estudante, pos);
}
}else{
printf("Nome inválido!\n");
}
return;
}

void menuEditaEstudante(void){
printf("\n#########################################\n");
printf(" Editar Informações do Estudante\n");
printf("#########################################\n\n");
printf("Opções: \n\n");

printf("1 - Selecionar por número de matrícula.\n");
printf("2 - Selecionar por nome.\n");
printf("3 - Voltar ao menu principal.\n");

printf("\nDigite uma opção: ");
return;
}

int editarEstudante(Estudantes estudante[], char nomeArquivo[], int *estLidos){
int opcao = 0;
int opcao2 = 0;
int opcao3 = 0;

if (estudante[0].nome[0] == '\0'){
printf("Nao há turma carregada!\n");
opcao = 3;
} else {
menuEditaEstudante();
scanf("%d", &opcao);
system("cls");

while(opcao < 1 || opcao > 3){
printf("Opcão Inválida!\nDigite novamente: ");
scanf("%d", &opcao);
system("cls");
}

switch(opcao){
case 1:
selecionarPorMatricula(estudante, estLidos);
break;
case 2:
selecionarPorNome(estudante, estLidos);
break;
default:
break;
}

}
return opcao;
}

void relerTurma(Estudantes estudante[], char nomeArquivo[], int *estLidos){
char buf[50] = {'\0'}; // temporário para o nome dos estudantes
FILE *fp = NULL;

fp = fopen(nomeArquivo, "r");
if (fp != NULL) {
printf("Arquivo %s lido com sucesso!\n", nomeArquivo);
zeraEstudantes(estudante);

int i = 0;
while( !feof(fp) && i < TAM_MAX){ // feof testa se chegou no final do arquivo.
memset(buf, '\0', sizeof(buf)); // Zera o buffer.

// Lê o nome para a string temporária buf.
if (fgets(buf, sizeof(buf), fp) == NULL){
fprintf(stderr, "ATENÇÃO, LISTA VAZIA.\n");
//exit(1);
} else {
// Retira o \n do final da string lida.
buf[strcspn(buf, "\n")] = '\0';

// Copia de buf para o campo nome do i-esimo estudante
strcpy(estudante[i].nome, buf);
}

fscanf(fp, "%s\n", estudante[i].matricula);
fscanf(fp, "%s\n", estudante[i].materia);
for(int j = 0; j < 3; j++)
fscanf(fp, "%f\n", &estudante[i].notas[j]);
fscanf(fp, "%d\n", &estudante[i].faltas);
fscanf(fp, "%f\n", &estudante[i].notafinal);
fscanf(fp, "%c\n", &estudante[i].situacao);


i++;

*estLidos = i;
}

fclose(fp);
}else{
printf("Arquivo %s não existe!\n", nomeArquivo);
}

return;
}


void salvarSair(Estudantes estudante[], char nomeArquivo[], int *estLidos){
if (nomeArquivo[0] == '\0'){
char op;
char nome[50] = {'\0'};
printf("O arquivo não existe. Deseja criar um novo? (S/N): ");
getchar();
scanf("%c",&op);
system("cls");

if(op == 'S' || op == 's'){
FILE *fp = NULL;
printf("Digite o nome do arquivo: ");
scanf("%s", nome);
system("cls");
fp = fopen(nome, "w");
for(int i = 0; i < *estLidos; i++){
fprintf(fp, "%s\n", estudante[i].nome);
fprintf(fp, "%s\n", estudante[i].matricula);
fprintf(fp, "%s\n", estudante[i].materia);
for(int j = 0; j < 3; j++)
fprintf(fp, "%f\n", estudante[i].notas[j]);
fprintf(fp, "%d\n", estudante[i].faltas);
fprintf(fp, "%f\n", estudante[i].notafinal);
fprintf(fp, "%c\n", estudante[i].situacao);
}
fclose(fp);
printf("Salvo com sucesso\n");
}
else if(op == 'N' || op == 'n')
{
printf("Saindo sem salvar...\n");
return;
}
}
else
{
char op;
printf("O arquivo já existe. Deseja sobrescrevê-lo? (S/N)\n");
getchar();
scanf("%c",&op);
system("cls");
if(op == 'S' || op == 's'){
FILE *fp = NULL;
fp = fopen(nomeArquivo, "w+");
for(int i = 0; i < *estLidos; i++){
fprintf(fp, "%s\n", estudante[i].nome);
fprintf(fp, "%s\n", estudante[i].matricula);
fprintf(fp, "%s\n", estudante[i].materia);
for(int j = 0; j < 3; j++)
fprintf(fp, "%f\n", estudante[i].notas[j]);
fprintf(fp, "%d\n", estudante[i].faltas);
fprintf(fp, "%f\n", estudante[i].notafinal);
fprintf(fp, "%c\n", estudante[i].situacao);
}
fclose(fp);
printf("\nSalvo com sucesso!\n");
}
else if(op == 'N' || op == 'n')
{
printf("Saindo sem salvar...\n");
return;
}
}
return;
}

void exibeMenuPrincipal(void){
printf("\n#########################################\n", setlocale(LC_ALL,""));
printf(" Menu Principal\n");
printf("#########################################\n\n");
printf("Opções: \n\n");
printf("1 - Ler turma de estudantes do arquivo.\n");
printf("2 - Imprimir turma de estudantes.\n");
printf("3 - Cadastrar novo estudante.\n");
printf("4 - Editar informações de um estudante.\n");
printf("5 - Reler turma de estudantes do arquivo.\n");
printf("6 - Salvar e Sair.\n");
printf("7 - Sair sem Salvar.\n\n");
printf("Digite uma opção: ");
return;
}

int menuPrincipal(Estudantes estudante[], char nomeArquivo[], int *estLidos){
int opcao = 0;
int opcao2 = 0;
int opcao3 = 0;

exibeMenuPrincipal();
scanf("%d", &opcao);
system("cls");

while(opcao < 1 || opcao > 7){
printf("Opção Inválida!\nDigite novamente: ");
scanf("%d", &opcao);
system("cls");
}

switch(opcao){
case 1:
while(opcao2 != 3){
opcao2 = lerTurma(estudante, nomeArquivo, estLidos);
}
break;
case 2:
imprimirEstudantes(estudante, nomeArquivo, estLidos);
break;
case 3:
cadastrarEstudante(estudante, nomeArquivo, estLidos);
break;
case 4:
while(opcao3 != 3){
opcao3 = editarEstudante(estudante, nomeArquivo, estLidos);
}
break;
case 5:
relerTurma(estudante, nomeArquivo, estLidos);
break;
case 6:
salvarSair(estudante, nomeArquivo, estLidos);
printf("Até a proxima...\n");
exit(0);
break;
default:
exit(0);
system("pause");
}

return opcao;
}

int main(void){
int opcao = 0;
Estudantes estudante[TAM_MAX] = {{"\0", "\0",0, 0, '\0'}};
char nomeArquivo[50] = {'\0'};
int estLidos = 0;

while(opcao != 7){
opcao = menuPrincipal(estudante, nomeArquivo, &estLidos);
}
system("pause");
return 0;
}



4. Re: Como transformar inteiro em float

-
BiaMonteiro

(usa Arch Linux)

Enviado em 15/12/2018 - 20:30h

lukssds escreveu:

tentei mudar pra float as notas, mas na hora q eu coloco uma nota ele encerra o programa, nao sei o q fazer mais

...

O que você pode fazer é depurar o código para ver porque isso acontece, ou seja, executar linha por linha e verificar o valor das variáveis em tempo de execução.
É uma prática boa de programação, e caso você não tenha depurador algum programa antes, você talvez gostará muito do recurso e crescerá na área.

A maioria das IDEs, Code::Blocks, Dev C++, Eclipse, dentre outras, trazem um ambiente de depuração.

Um depurador famoso é o gdb, em linha de comando.

Você está rodando o Windows, né? Porque system("cls") e system("pause") são comandos que só funcionam em Windows, e são considerados má prática de programação.

Outra coisa, esse seu código está gigante. Não o li todo, admito, porque não dá nem vontade de ler.
Já tentou colocar as funções separadamente em arquivos de cabeçalho? Há tutoriais na internet sobre.
E colocando em arquivos de cabeçalho, você consegue encontrar onde estão os erros, porque divide o código em blocos. Um bloco estará problemático, os outros funcionando!

Desculpe se em algum momento fui grossa, só estou dando conselhos.


5. Re: Como transformar inteiro em float

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/12/2018 - 09:35h

lukssds escreveu:

tentei mudar pra float as notas, mas na hora q eu coloco uma nota ele encerra o programa, nao sei o q fazer mais :(


Prezado,

Seu programa não é trivial nem em tamanho nem em organização. Assim, por favor, dê mais informações a respeito de em que momento o erro ocorre (exemplos: em qual função? depois de ter lido quais outras variáveis? aparece (mesmo que apenas piscando) alguma mensagem de erro antes de o programa fechar? qual?).






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts